2013-09-24 3 views
1

사용자, 제품, 소유권 및 위치의 네 가지 모델이 있습니다. 제품은 소유권을 통해 사용자에게 속하며 사용자는 소유권을 통해 많은 제품을 보유합니다. 사용자가 제품을 만들 때 사용자에게 위치가 있으면 제품이 동일한 위치에 연결되기를 바랍니다.다형성 연관을 역전시킬 수 있습니까?

우리는이를 변환 할 수 있습니다 :이에

class Location < ActiveRecord::Base 
    belongs_to :localizable, polymorphic: true 
end 

class User < ActiveRecord::Base 
    has_one :location, as: :localizable 
end 

class Product < ActiveRecord::Base 
    has_one :location, as: :localizable 
end 

: 그래서 여기 내 질문은

class Location < ActiveRecord::Base 
    has_many :localizables, polymorphic: true 
end 

class User < ActiveRecord::Base 
    belongs_to :location, as: :localizable 
end 

class Product < ActiveRecord::Base 
    belongs_to :location, as: :localizable 
end 
+0

이렇게하면 안됩니다. 쿼리는 한 번에 하나의 모델을 가져올 수 있습니다. – apneadiving

+0

그러면 사용자가 제품을 만들 때 사용자 위치를 복제하여 제품과 연결해야합니다. –

+0

모델에서 위치를 추출하는 데 추가 된 값이 거의 없습니다. 쿼리 등에서 지옥이 있습니다 ... – apneadiving

답변

1

어떻게 product.owner.locationproduct.location을 위임에 대해.

class Product < ActiveRecord::Base 
    delegate :location, to: :owner 
end 

당신이 product.location를 호출하면

에서, 소유자의 위치가 반환됩니다 : (소유자/사용자 관계에 대한 변화 식별자 필요에 따라) 다음과 같이

는 제품 클래스에서 수행 할 수 있습니다.

+0

제품의 위치가 소유자의 위치와 다른 경우에는 좋습니까? –

+0

그러면 위임 트릭으로 충분하지 않습니다. ;) – zwippie

+0

아,하지만 힌트 주셔서 감사합니다! –

관련 문제