关联条件Rails 4

吉尔赫姆·奥登登(Guilherme Oderdenge)

有没有一种方法可以对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我可以whereSegment模型上使用这样的条件,但是我该如何实现products呢?

我已经尝试过的

我找到了解决方案。看一看:

@segments = Segment.find(:all, include: :products, conditions: {products: {status: 1}})

它有效,但是我认为代码可以更好。

为什么我认为代码可以更好

好吧,include: :products如果关联已经存在于模型中,为什么还要使用我们正在通过模型关联事物,我确信这已经足够了。

有想法吗?

纳森达

一些提示,可能会对您有所帮助。

为了便于命名,我考虑使用status==1as 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章