如何在rails链接关系上查询ruby has_many而不是has_many

时间:2017-10-03 05:57:23

标签: ruby-on-rails ruby activerecord

在rails中,我有3个型号 $HOMEfifo = open(path, dir_fd='w')

Category, SubCategory has_many ProductCategory has_many Subcategory

据说有SubcatetgoryProducts。 电影有movie Category喜欢恐怖/戏剧/喜剧 ......

如何查询畅销电影? 我尝试了TV Category,但它没有成功。

我可以查询Subcategories@category.products吗? 无论如何还要将它们联系起来?这样我就能找到最畅销的电影类产品。

2 个答案:

答案 0 :(得分:1)

是的,您可以设置课程,以便拨打@category.products。您必须在Category类上定义has_many through关系:

class Category
  has_many :products, through: :sub_categories
end

现在,如果您有@category并要求@category.products ActiveRecord 将发出两次数据库请求。第一个看起来像这样:

SELECT "sub_categories"."id" FROM "sub_categories" WHERE "sub_categories"."category_id" = $1  [["category_id", 1]]

这会返回 ActiveRecord 将传递给下一个查询的sub_category ID列表。假设从第一个查询返回的sub_category ids是2,4和5,那么你会得到这个:

SELECT "products".* FROM "products" WHERE "products"."sub_category_id" IN (2, 4, 5)

这一切都发生在幕后,你会得到一个很好的Product::ActiveRecord Relation,你可以照常使用。

答案 1 :(得分:0)

在您的类别模型中,添加以下内容,

has_many :products, through: sub_categories

然后您就可以直接查询了。

希望有所帮助。