这是一种常见现象。我有一个父类别,比如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)
,但它包含重复的类别。什么是解决这个常见问题的最佳通用方法?
答案 0 :(得分:1)
.joins
制作副本,而.includes
则不重复。
在您的情况下,以下内容应该有效:
Category.includes(:books).merge(Book.all_published)