1

谁能看看我做错了什么?这是 Rails 3:

class Ad < ActiveRecord::Base
belongs_to :postingtemplate

    scope :active, (lambda do |ad| 
        Item.exists?(:postingtemplate => ad.postingtemplate_id)
    end)

end

它是 Ad 模型中的一个范围,应该返回所有广告,其中 Item 存在于item.postingtemplate == ad.postingtemplate_id

更新

把它分成两个范围,它起作用了:)

class Ad < ActiveRecord::Base
  belongs_to :postingtemplate
  scope :active, where(:postingtemplate_id => Postingtemplate.active)
end

class Postingtemplate < ActiveRecord::Base
  has_many :ads
  scope :active, where(:id => Item.all.collect{|x| x.postingtemplate}.uniq)
end

如果有人知道更好的方法 - 随时告诉

4

1 回答 1

0

你可以用一个join

scope :active, lambda { |ad| joins(:postingtemplate => :items).where(:postingtemplate => {:postingtemplate_id => ad.postingtemplate_id}) }

也许这也可以:

scope :active, lambda { |ad| joins(:postingtemplate => :items).where(:postingtemplate => ad.postingtemplate) }
于 2013-04-13T14:58:47.737 回答