2012-02-19 89 views
22

我有兩個相關的模型,比如這個:從相關模型在另一範圍使用範圍

class PartCategory < ActiveRecord::Base 
    has_many :part_types 
    scope :engine, where(:name => 'Engine') 
end 

class PartType < ActiveRecord::Base 
    belongs_to :part_category 
end 

我想一個範圍添加到PartType模型,如:

scope :engine_parts, lambda { joins(:part_category).engine } 

但是,當我嘗試,我得到以下錯誤:

NoMethodError:未定義的方法`default_scoped「? ActiveRecord的::基地:

類我沒有很多與範圍的事情的經驗,所以我可能失去了一些東西基本在這裏。有人可以告訴我它是什麼嗎?

回答

41

試試這個:

scope :engine_parts, lambda { joins(:part_category).merge(PartCategory.engine) } 

基本上,joins(:part_category)結果是連接兩個車型,所以你不能直接調用就可以了.engine,就需要撰寫範圍以這種方式。

請參閱Here for more

+0

非常感謝!這是答案。 – bappelt 2012-02-19 01:46:48

+4

不推薦使用'&'。改用'merge()'。參見[這裏](http://stackoverflow.com/questions/7660867/why-using-merge-method-with-scopes-isnt-working-anymore-on-rails-3-1)和[這裏](HTTPS: //github.com/rails/rails/commit/66003f596452aba927312c4218dfc8d408166d54) – 2012-06-03 02:06:49

+0

'合併()'做到了!謝謝! – yorch 2012-10-31 02:38:27