2013-09-24 56 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.locationproduct.owner.location

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

如果調用product.location,該所有者的位置將被退回:

這可以在產品類如下(根據需要更改標識爲業主/用戶關係)來完成。

+0

好的,但是當產品的位置與所有者的位置不一樣時? –

+0

然後代表團把戲是不夠的。 ;) – zwippie

+0

啊,但感謝提示! –