2012-02-19 10 views
22

Mam dwóch podobnych modeli, takich jak to:Korzystanie z zakresu od pokrewnego modelu w innym zakresie

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

class PartType < ActiveRecord::Base 
    belongs_to :part_category 
end 

Chciałbym dodać zakres do modelu parttype takich jak:

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

Ale gdy próbuję tego, pojawia się następujący błąd:

NoMethodError: niezdefiniowana metoda "default_scoped?" dla ActiveRecord :: Base: Class

Nie mam dużego doświadczenia z tym tematem, więc prawdopodobnie brakuje mi czegoś fundamentalnego. Czy ktoś może mi powiedzieć, co to jest.

Odpowiedz

41

Spróbuj tego:

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

Zasadniczo wynikiem joins(:part_category) jest przyłączyć się z dwóch modeli, więc nie można nazwać .engine na nim bezpośrednio, trzeba komponować zasięgów w ten sposób.

Zobacz Here for more

+0

Dziękuję bardzo! Taka była odpowiedź. – bappelt

+4

Używanie '&' jest nieaktualne. Zamiast tego użyj 'merge()'. Zobacz [tutaj] (http://stackoverflow.com/questions/7660867/why-using-merge-method-with-skopes-isnt-working-anymore-on--3ils) i [tutaj] (https: //github.com/rails/rails/commit/66003f596452aba927312c4218dfc8d408166d54) –

+0

'merge()' zrobiło to! Dzięki! – yorch

Powiązane problemy