在连接中应用范围

发布于 2024-12-09 05:17:09 字数 681 浏览 0 评论 0原文

我有以下模型:

class Category < ActiveRecord::Base
  has_many :items
  default_scope where(:enabled => true, :out_of_stock => false)
  scope :enabled, where(:enabled => true)
  scope :out_of_stock, where(:out_of_stock => true)
end

class Item < ActiveRecord:Base
  belongs_to :category
end

使用联接时,我遇到了以下代码重复,在整个项目中重复范围条件:

Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :enabled => true, :out_of_stock => false})

如果可以在联接中应用指定范围,那就太好了:

Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :scope => :default})

I have following models:

class Category < ActiveRecord::Base
  has_many :items
  default_scope where(:enabled => true, :out_of_stock => false)
  scope :enabled, where(:enabled => true)
  scope :out_of_stock, where(:out_of_stock => true)
end

class Item < ActiveRecord:Base
  belongs_to :category
end

I've faced following code duplication, repeating scope conditions across entire project, when using joins:

Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :enabled => true, :out_of_stock => false})

It would be nice, if applying specified scope in joins will be possible:

Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :scope => :default})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零時差 2024-12-16 05:17:09

尝试像这样使用 &

Category.joins(:offers, :items) & Item.default.where(:merchant_id => @merchant.id)

我认为这称为插值。它将两个查询连接在一起,保留第一个查询作为(它返回Category对象)。

Try using & like this:

Category.joins(:offers, :items) & Item.default.where(:merchant_id => @merchant.id)

I think this is called interpolation. It joins the two queries together, preserving the first one as the base (it return Category objects).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文