Sql 在rails 3.2中,在连接后执行联合查询是正确的方法吗?
在Sql 在rails 3.2中,在连接后执行联合查询是正确的方法吗?,sql,ruby-on-rails,ruby-on-rails-3,Sql,Ruby On Rails,Ruby On Rails 3,在rails3.2应用程序中,有3种型号log(属于客户)、customer和project。customer和project都有sales\u id字段。下面是我们要执行的查询: 为客户返回以下日志1)销售id等于会话[:用户id]的客户的日志和2)项目销售id等于会话[:用户id]的客户的日志 1)的rails查询可以是: Log.joins(:customer).where(:customers => {:sales_id => session[:user_id]}) Log
rails3.2
应用程序中,有3种型号log
(属于客户)、customer
和project
。customer
和project
都有sales\u id
字段。下面是我们要执行的查询:
为客户返回以下日志1)销售id等于会话[:用户id]的客户的日志和2)项目销售id等于会话[:用户id]的客户的日志
1)的rails查询可以是:
Log.joins(:customer).where(:customers => {:sales_id => session[:user_id]})
Log.joins(:customer => :projects).where(:projects => {:sales_id => session[:user_id})
2)的Rails查询可以是:
Log.joins(:customer).where(:customers => {:sales_id => session[:user_id]})
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])
中的第11.2.4章讨论了一个有趣的查询案例。我们还没有测试上面的查询。我们想知道上面的union查询是否正确 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
您是对的,rails不支持本地联合。rails查询有时比原始sql更优雅,也更强大。是的,Active Record是我在各种语言中见过的最强大、最优雅的工具。如果它可以支持更多的连接类型,它会更大,它只支持本地内部连接,如果我想要左外部连接或其他连接,我必须编写一些sql片段。rails查询有解决方案吗?我正在尝试使用rails查询来执行sql。如果您必须在rails中运行“union”,您可以看到gem union,我没有使用它。几天前,我知道一个名为“squel”的gem,它可以让您编写sql更简单,除了“union”。你可以查一下。