2015-02-10 160 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

相关问题