2012-06-19 48 views
6

Tôi đang thực hiện truy vấn sql liệu sau đây trong một trong các bộ điều khiển của tôi:Ruby on Rails - Năng động, SQL Query

active_users_query = <<-SQL 
     SELECT count(DISTINCT patients.id) 
     FROM public.patients, public.subscriptions, public.users, public.calendar_days 
     WHERE patients.user_id = users.id 
     AND patients.id = calendar_days.patient_id 
     AND subscriptions.user_id = patients.user_id 
     AND (date_trunc('day',patients.last_sync) > current_date - interval '30 days' 
     OR date_trunc('day', calendar_days.created_at) > current_date - interval '30 days' 
     OR date_trunc('day',users.current_sign_in_at) > current_date - interval '30 days') 
     AND subscriptions.code_id = 2 
SQL 

Có cách nào tôi có thể thêm một số mã RoR đến dòng cuối cùng của truy vấn này để tạo code_id động?

Something như thế này:

AND subscriptions.code_id = '@subscription.code' 

Trả lời

10

Bạn có thể suy biến Ruby trong chuỗi heredoc

active_users_query = <<-SQL 
     SELECT count(DISTINCT patients.id) 
     FROM public.patients, public.subscriptions, public.users, public.calendar_days 
     WHERE patients.user_id = users.id 
     AND patients.id = calendar_days.patient_id 
     AND subscriptions.user_id = patients.user_id 
     AND (date_trunc('day',patients.last_sync) > current_date - interval '30 days' 
     OR date_trunc('day', calendar_days.created_at) > current_date - interval '30 days' 
     OR date_trunc('day',users.current_sign_in_at) > current_date - interval '30 days') 
     AND subscriptions.code_id = '#{@subscription.code}' 
SQL 
+0

Làm việc như một nét duyên dáng. Cảm ơn !! – Myxtic