有没有一种方法可以对ActiveRecord的关联表进行条件处理?
我这样检索segments
:
@segments = Segment.all
但是,Segment
has_many
products
。看:
型号/product.rb:
class Product < ActiveRecord::Base
belongs_to :segment, dependent: :destroy
end
models / segment.rb:
class Segment < ActiveRecord::Base
has_many :products
end
问题是:我只想检索状态等于的产品1
。我可以where
在Segment
模型上使用这样的条件,但是我该如何实现products
呢?
我找到了解决方案。看一看:
@segments = Segment.find(:all, include: :products, conditions: {products: {status: 1}})
它有效,但是我认为代码可以更好。
好吧,include: :products
如果关联已经存在于模型中,为什么还要使用?我们正在通过模型关联事物,我确信这已经足够了。
有想法吗?
一些提示,可能会对您有所帮助。
为了便于命名,我考虑使用status==1
as active
。当然,我不知道这对您的具体情况意味着什么。
class Product
ACTIVE=1
def self.active
where(status: ACTIVE)
end
end
现在,您编写如下内容:
segment.products.active
并且只会返回给定细分受众群中的有效产品。
您找到的解决方案将检索具有(活动)产品的所有细分,可以这样写:
Segment.includes(:products).where(products: {status: 1})
现在,为什么要这么详细:它实际上转换为sql查询,因此您必须对此更加明确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句