Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在rails 3.2中,在连接后执行联合查询是正确的方法吗?_Sql_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

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”。你可以查一下。