log
个应用中有3个模型customer
(属于客户),project
和rails 3.2
。 customer
和project
都有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章讨论了一个有趣的查询案例。我们还没有测试过上面的查询。我们想知道上面的联合查询是否确实正确。
答案 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