gpt4 book ai didi

ruby-on-rails - Rails 4 - 添加范围到包含的模型

转载 作者:行者123 更新时间:2023-12-02 21:30:56 24 4
gpt4 key购买 nike

我有这个协会

class Product
has_many :categorizations
has_many :categories, through: :categorization

scope :first_five, lambda { limit(5) }
end

class Category
has_many :categorizations
has_many :products, through: :categorization
end

对于每个类别,我希望使用上面定义的 first_ Five 范围获取前五个产品

为了最小化数据库请求,我使用includes()

@categories = Category.includes(:products).all

但是如何将范围添加到产品?我不想使用 default_scope 因为它会影响一切。

我在 Google 上找不到它(或者我只是找不到正确的搜索词)

谢谢

最佳答案

Rails 4 中 lambda 作用域的新语法是:

scope :first_five, -> { limit(5) }

要将 AR 查询中的产品限制为五个,您可以执行以下操作:

@categories = Category.includes(:products).merge(Product.first_five).all

merge(Product.first_ Five) 将在有限的五个产品上添加一个左外连接

更新:

上面注释的代码将限制类别。解决原始问题的一个可能的解决方案可能是添加另一个 has_many...through 关系,在 Category 模型上将其称为 limited_products ,如下所示:

has_many :limited_products, -> { limit(5) }, 
through: :products,
source: :categorizations

使用此 Categeory.includes(:limited_products) 应该会产生将产品限制为 5 的预期结果。

按照您的建议,将 source: :categorizations 选项添加到新添加的关联 limited_products 中。 sourceclass_name 应该是同义词。由于我们定义的关联是一个 has_many...through 关联,它忽略 class_name 选项,因此我们应该使用 :source 选项而不是 :class_name 选项。 has_many...through 关系中忽略的其他关联选项有 :primary_key:foreign_key

关于ruby-on-rails - Rails 4 - 添加范围到包含的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22292149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com