基于has_many关系属性的Active Record查询?

时间:2014-05-29 17:02:59

标签: ruby-on-rails activerecord ruby-on-rails-4 merge active-record-query

这是一种常见现象。我有一个父类别,比如Category。它有很多子类别,比如Books。图书有一个属性published,我希望获得已发布图书的所有类别。我该怎么做?


我可以遍历类别来找到它们,但我想要一个更好的方法。在this Railscast中,他建议在我的示例中使用以下查询:Category.joins(:products).merge(Product.cheap)Subject.joins(:books).merge(Book.published)。但是,我在published中没有范围Book

我在all_published中有一个方法Book可以返回所有已发布的图书,因此我尝试了Category.joins(:books).merge(Book.all_published),但它包含重复的类别。什么是解决这个常见问题的最佳通用方法?

1 个答案:

答案 0 :(得分:1)

.joins制作副本,而.includes则不重复。

在您的情况下,以下内容应该有效:

Category.includes(:books).merge(Book.all_published)