所以基本上我在rails控制台中尝试了一些东西,我发现在使用连接和包含查询时存在一些差异。我知道它们之间的区别,例如使用join的延迟加载和使用includes的eager loading。但是下面的代码似乎让我感到困惑,它们是否有所不同,为什么不与包含合并。
Table1.joins(:table2).merge(Table2.where(field_of_table2: "value")
Table1.joins(:table2).where(:table2 => {field_of_table2: "value"})
两者似乎都给了我相同的结果。
Table1.includes(:table2).merge(Table2.where(field_of_table2: "value")
合并似乎不适用于包括,但
Table1.includes(:table2).where(:table2 => {field_of_table2: "value")
工作但又生成一个复杂的sql语句。
我是新手,请帮助我理解使用这两个陈述的任何不良影响。 如果需要,我会很高兴发布sql语句。
答案 0 :(得分:0)
合并 - 如果table2是ActiveRecord :: Relation,则合并table2中的条件。如果table2是数组,则返回表示结果记录与table2的交集的数组。
其中 - 返回一个新关系,它是根据参数中的条件过滤当前关系的结果。
其中基本上过滤当前关系给出条件但合并返回其他关系的公共行。
例如。
class Book < ActiveRecord::Base
scope :available, where(:available => true)
end
class Author < ActiveRecord::Base
has_many :books
scope :with_available_books, joins(:books).merge(Book.available)
end
Author.with_available_books
上述状态归还所有书籍,包括可用书籍。