Ruby on rails 基于属性的活动记录查询有多个关系?

Ruby on rails 基于属性的活动记录查询有多个关系?,ruby-on-rails,activerecord,ruby-on-rails-4,merge,active-record-query,Ruby On Rails,Activerecord,Ruby On Rails 4,Merge,Active Record Query,这是一个常见的现象。我有一个父类别,比如说category。它有许多子类别,比如书籍。书籍有一个属性published,我想获取所有已出版书籍的类别。我该怎么做 我可以通过循环分类找到它们,但我想要一个更好的方法。在中,他建议使用以下查询:Category.joins(:products)。merge(Product.cheap),或者在我的示例中使用Subject.joins(:books)。merge(Book.published)。但是,我没有在书中发布范围 我在Book中有一个方法al

这是一个常见的现象。我有一个父类别,比如说
category
。它有许多子类别,比如
书籍
。书籍有一个属性
published
,我想获取所有已出版书籍的类别。我该怎么做


我可以通过循环分类找到它们,但我想要一个更好的方法。在中,他建议使用以下查询:
Category.joins(:products)。merge(Product.cheap)
,或者在我的示例中使用
Subject.joins(:books)。merge(Book.published)
。但是,我没有在
书中发布
范围


我在
Book
中有一个方法
all\u published
返回所有已出版的书籍,因此我尝试了
Category.joins(:books.merge(Book.all\u published)
,但它包含重复的类别。解决这一常见问题的最佳常规方法是什么?

.joins
进行复制,而
.includes
不进行复制

在您的情况下,以下各项应起作用:

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

.joins
复制,
.includes
不:
分类。包括(:书籍)。合并(分类。所有已发布)
应适用于you@MrYoshiji,那就行了。我想那是最好的办法。