在rails 3.2中加入后是否正确进行联合查询?

时间:2013-08-15 02:31:02

标签: sql ruby-on-rails ruby-on-rails-3

log个应用中有3个模型customer(属于客户),projectrails 3.2customerproject都有sales_id字段。以下是我们要执行的查询:

为客户返回以下日志1)sales_id等于session [:user_id]的客户的日志和2)项目'sales_id等于session [:user_id]

的客户的日志

1)的rails查询可能是:

Log.joins(:customer).where(:customers => {:sales_id => session[:user_id]})

Rails查询2)可能是:

Log.joins(:customer => :projects).where(:projects => {:sales_id => session[:user_id})

要结合上述查询,是否是执行以下操作的正确方法?

Log.joins([:customer, {:customer => :projects}]).where('customers.sales_id = id OR projects.sales_id = id', id: session[:user_id])

3 http://guides.rubyonrails.org/v3.2.13/active_record_querying.html中的第11.2.4章讨论了一个有趣的查询案例。我们还没有测试过上面的查询。我们想知道上面的联合查询是否确实正确。

1 个答案:

答案 0 :(得分:1)

Rails本身不支持union。在你的情况下,我认为它不需要联合,只需使用左外连接。

Log.joins('left outer JOIN `customers` ON `customers`.`id` = `logs`.`customer_id`
left outer JOIN `projects` ON `projects`.`customer_id` = `customers`.`id`').where('customers.sales_id = :id OR projects.sales_id = :id', id: session[:user_id]).distinct