我是Rails的新手,我正在尝试在应用程序中实现这些功能,但是我不确定如何进行操作以及最好的方法。
我想参加不同类型的活动,例如餐厅,健身房,商店,ecc。所有这些类型的活动都具有相同的“基本”属性,例如名称,城市,地址,电子邮件,但是例如,餐厅也可以具有“食物类型”属性,或者健身房可以具有“课程”。我当时考虑的不是创建不同的模型,也不是创建具有冗余属性的不同表,而是创建一个基本模型“ activity”,然后创建“ store”,“ gym”等模型。
什么是最佳解决方案,我如何实现?我在寻找STI和多重继承表,但是不确定它们是否合适,哪种解决方案是最佳选择。
您的问题有点含糊,但听起来确实想使用关系而不是继承。
一个类(或Rails MVC范例中的模型)可以具有或属于另一个模型。这就是所谓的关系。这些模型不会彼此继承(尽管在其他用例中也可以做到)。它们之间只有相互关系,就像数据库表之间可以相互关系一样。实际上,关系是您声明模型的基础数据库表之间的关系的方式。
地址不是唯一与体育馆有关的模型。健身房也是一项业务,因此belongs_to
是商务舱。它有一个且只有一个地址,以便has_one
解决。
您创建各自具有自己属性的模型(属性是通过迁移创建的)。如何设置它们取决于您的需求。由于您的健身房必须具有地址,因此您可以创建一个包含地址属性的地址模型:
class Address
# your attributes are in the database as created by your migration(s). You don't need to list them in the class.
# validations, methods, etc.
end`
然后,将您的地址模型用于具有地址的任何内容。您无需在每个类中都包含地址属性来重复自己。
然后,在模型类中设置“健身房”与“地址和业务”之间的关系。
由于您的体育馆是企业,因此(您是全球企业集团众多企业之一)您可以将其声明belongs_to
为企业模型。
一类可以属于多个其他类。一个类可以具有另一个类,也可以具有多个另一个类。(还有has_and_belongs_to_many,这有点复杂。)
这是您的Gym模型:
class Gym
belongs_to :business
has_one :address
has_many :employees
has_many :members
#rest of Gym class
end
现在,您可以像这样引用健身房的地址:
gym_one.address.line_1
gym_one.address.line_2
gym_one.address.ship_attention
gym_one.address.city
gym_one.address.state
gym_one.address.zip
gym_one.address.country
您还可以参考健身房属于您的哪个企业:
gym_one.business
假设您设置了商家和地址之间的关系,则可以获取健身房的母公司的地址属性:
gym_one.business.address.city
现在您有了Gym课,您不必在每个课中重复您的属性。您只需在迁移中添加健身房专有的属性:
在db / migrations / {date_code} _create_gym中:
class Gyms < ActiveRecord::Migration
def change
create_table :gyms do |t|
t.string :name
# Other attributes that only a gym has. Not attributes of things that have a relation to Gym
end
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句