查找没有任何关联模型的所有记录

pro*_*ons 3 ruby activerecord ruby-on-rails ruby-on-rails-3

我正在使用Rails 3.2.

我有一个产品型号和一个变体型号.产品可以有许多变体.变体可以属于许多产品.

我想在Products模型上查找,只查找具有特定变量计数的产品,例如:(伪代码):

Product.where("Product.variants.count == 0")

你用activerecord怎么做?

Sea*_*ill 5

您可以使用a LEFT OUTER JOIN返回所需的记录.Rails LEFT OUTER JOIN在您使用时发出includes.

例如:

Product.includes(:variants).where('variants.id' => nil)
Run Code Online (Sandbox Code Playgroud)

这将返回所有products没有的地方variants.您也可以使用显式joins.

Product.joins('LEFT OUTER JOIN variants ON variants.product_id = products.id').where('variants.id' => nil)
Run Code Online (Sandbox Code Playgroud)

LEFT OUTER JOIN会回报的加盟左侧的记录,即使右侧是不存在的.它将null值放入相关列中,然后您可以使用它来检查负面存在,就像我上面所做的那样.您可以在此处阅读有关左连接的更多信息:http://www.w3schools.com/sql/sql_join_left.asp.

这个解决方案的好处在于你没有将子查询作为条件,这很可能会更高效.