【问题标题】:How to query ruby on rails chain relationships has_many than has_many如何查询 ruby​​ on rails 链关系 has_many 比 has_many
【发布时间】:2017-10-03 05:57:22
【问题描述】:

在 Rails 中,我有 3 个模型
Category, SubCategoryProduct

一个Category has_many Subcategory 和一个Subcatetgory has_many Products

也就是说有一个movie Category 和一个TV Category。 这部电影有Subcategories 喜欢恐怖/戏剧/喜剧...

如何查询畅销电影? 我试过@category.products 不行。

我可以查询@category.subcategories@subcategory.products吗?
有没有办法把它们锁起来?这样我就可以找到电影类别的畅销产品。

【问题讨论】:

标签: ruby-on-rails ruby activerecord


【解决方案1】:

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

class Category
  has_many :products, through: :sub_categories
end

现在如果你有@category 并请求@category.productsActiveRecord 将向数据库发出两次请求。第一个看起来像这样:

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

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

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

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

【讨论】:

  • 很好而彻底的答案!
【解决方案2】:

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

has_many :products, through: sub_categories

然后就可以直接查询了。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多