0

有 3 个模型log(属于客户),customer并且projectrails 3.2应用程序中。两者customer都有projectsales_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])

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

4

1 回答 1

1

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

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
于 2013-08-15T03:28:22.337 回答