2015-02-10 102 views
1

假設我有3個模型; 酒店,度假村和餐廳。 每個模型都有相似的屬性; 標題,描述,設施...等等...在rails中使用has_one嵌套屬性是個好主意嗎?

如果我想每個模型有一個屬性的位置; 國家,省,城市,地址,經度和緯度。

我應該建立選址模型,並使用HAS_ONE嵌套屬性我應該包括位置的屬性,這些模型? 哪一個更好或更好的方法?

回答

1

我想你需要使用多態關聯,因爲你需要在模型上屬於多個模型。你可以這樣使用它:

編輯:更改belongs_to :addressbelongs_to :locatable @vee糾正它。

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

class Hotel < ActiveRecord::Base 
    has_one :location, as: :locatable  
end 
class Resort < ActiveRecord::Base 
    has_one :location, as: :locatable  
end 
class Restaurant < ActiveRecord::Base 
    has_one :location, as: :locatable  
end 

更多詳細信息:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

希望這有助於。

+1

建議遵循以下命名約定並將'belongs_to'更新爲':locatable'和'Hotel','Resort'和'Restaurant's'has_one'更改爲'has_one:location,如:: locatable'。 – vee 2015-02-10 01:49:55

+0

非常感謝您的回答,我以前從未遇到過多態關聯。請試試看 – settawut 2015-02-10 06:01:56

+0

是的,這是我認爲對您的問題最好的解決方案。它也不會造成其他協會可能發生的任何冗餘。 – Deep 2015-02-10 06:07:00

相關問題