【问题标题】:How can I use conditions from 2 scopes on 2 models together如何在 2 个模型上一起使用来自 2 个范围的条件
【发布时间】:2015-10-13 20:18:35
【问题描述】:

我有以下模型,它们目前具有相同的范围:

program.rb

has_many: :campaigns
scope :visible, -> { where(status: 1) }

campaign.rb

belongs_to: programme
scope :visible, -> { where(status: 1) }

我想编辑campaign 范围以仅搜索可见的programmes。理想情况下,我想将该范围更改为:

(很可能在函数中)

def self.visible
Programme.visible.campaigns.where.(status: 1)
end

但这又回来了:

undefined method `campaigns' for #<Programme::ActiveRecord_Relation:0x007f8c9677cd68>

有人可以解释为什么我不能这样做吗?另外,如果对此有任何解决方案将不胜感激?最好不使用.joins(但我会采取我能得到的)

谢谢

【问题讨论】:

    标签: ruby-on-rails-4 activerecord scope associations


    【解决方案1】:

    从您的问题中很难判断 status 是 Programme、Campaign 还是两者的属性。

    假设两者,你可以这样做:

    # class Programme
    has_many :campaigns
    scope :visible, -> { where(status: 1) }
    
    # class Campaign
    belongs_to :programme
    scope :visible, do
      joins(:programme).
        merge(Programme.visible).
        where(status: 1)
    end
    

    使用此设置,Campaign.visible 将仅返回属于可见程序的广告系列(其中status == 1,不确定这是否意味着在您的应用中“可见”)。

    至于为什么不能打电话

    Programme.visible.campaigns.where(status: 1)
    

    campaigns 是属于单个程序的集合。向程序集询问其活动是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多