2012-06-19 130 views
6

我执行我的控制器之一以下原料SQL查询:Ruby on Rails的 - 动态SQL查询

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 

有没有一种方法,我可以添加一些RoR的代码来此查询的最后一行产生code_id动态?

事情是这样的:

AND subscriptions.code_id = '@subscription.code' 

回答

10

您可以在定界符字符串

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

工作就像一个魅力插值Ruby的变量。谢谢 !! – Myxtic