1
假设我有3个模型; 酒店,度假村和餐厅。 每个模型都有相似的属性; 标题,描述,设施...等等...在rails中使用has_one嵌套属性是个好主意吗?
如果我想每个模型有一个属性的位置; 国家,省,城市,地址,经度和纬度。
我应该建立选址模型,并使用HAS_ONE嵌套属性或我应该包括位置的属性,这些模型? 哪一个更好或更好的方法?
假设我有3个模型; 酒店,度假村和餐厅。 每个模型都有相似的属性; 标题,描述,设施...等等...在rails中使用has_one嵌套属性是个好主意吗?
如果我想每个模型有一个属性的位置; 国家,省,城市,地址,经度和纬度。
我应该建立选址模型,并使用HAS_ONE嵌套属性或我应该包括位置的属性,这些模型? 哪一个更好或更好的方法?
我想你需要使用多态关联,因为你需要在模型上属于多个模型。你可以这样使用它:
编辑:更改belongs_to :address
为belongs_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
希望这有助于。
建议遵循以下命名约定并将'belongs_to'更新为':locatable'和'Hotel','Resort'和'Restaurant's'has_one'更改为'has_one:location,如:: locatable'。 – vee 2015-02-10 01:49:55
非常感谢您的回答,我以前从未遇到过多态关联。请试试看 – settawut 2015-02-10 06:01:56
是的,这是我认为对您的问题最好的解决方案。它也不会造成其他协会可能发生的任何冗余。 – Deep 2015-02-10 06:07:00