2013-04-13 61 views
1

任何人都可以請看看我做錯了什麼嗎? 它的Rails 3:範圍Lambda錯誤的參數數

class Ad < ActiveRecord::Base 
belongs_to :postingtemplate 

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

end 

它的廣告模型內的範圍,應該返回所有的廣告,其產品存在其中item.postingtemplate == ad.postingtemplate_id

UPDATE

打破了它分成兩個範圍和它的工作:)

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 

如果有誰知道一個更好的方式 - 隨時告訴

回答

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) } 
+0

奇怪的是,他們都給予了同樣的錯誤:'引發ArgumentError:錯誤的參數數目(0 1) '。有可能我應該使用別的東西而不是「哪裏」部分? –

+0

你能告訴我們你是如何調用這個範圍的嗎?你是否傳遞了該呼叫的任何參數。請粘貼在你要調用的範圍 – manoj

+0

的行中哦,我明白了:)就是這樣調用它:'Ad.active'。沒關係 - 找到另一種方式 –