gpt4 book ai didi

ruby-on-rails - 具有几乎相同属性的模型

转载 作者:行者123 更新时间:2023-12-04 06:15:21 24 4
gpt4 key购买 nike

我是 Rails 的新手,我正在尝试在我的应用程序中实现这些东西,但我不确定如何进行以及哪种方法最好。

我想要不同类型的事件,例如餐厅、健身房、商店等。所有这些类型的事件都具有相同的“基本”属性,如名称、城市、地址、电子邮件,但例如餐厅也可以具有“食物类型”属性,或者健身房可以具有“类(class)”。我在考虑不创建不同的模型和具有冗余属性的不同表,而是创建一个基本模型“事件”,然后创建“商店”、“健身房”等模型。

什么是最好的解决方案,我该如何实现?我查找了 STI 和多重继承表,但我不确定它们是否合适以及哪种解决方案最好。

最佳答案

你的问题有点含糊,但听起来你确实想使用关系,而不是继承。

一个类(或 Rails MVC 范例中的模型)可以拥有或属于另一个模型或多个模型。这叫做关系。这些模型不会相互继承(尽管这对于其他用例是可能的。)它们只是彼此之间有关系,就像数据库表之间可以有关系一样。事实上,关系是您声明模型的基础数据库表之间关系的方式。

地址并不是唯一与健身房有关的模型。健身房也是一门生意,所以它属于商务舱。它一个且只有一个地址,所以它有一个地址。

您创建的模型每个都有自己的属性(属性是通过迁移创建的)。如何设置它们取决于您的需要。由于您的健身房必须有一个地址,因此您创建了一个包含地址属性的地址模型:

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`

然后,您可以将地址模型用于任何具有地址的内容。您无需通过在每个类中包含地址属性来重复自己。

然后在模型类中设置 Gym 与 A​​ddress 和 Business 之间的关系。

由于您的健身房是一项业务,(您的全局企业集团中的众多业务之一:) 您声明它属于业务模型。

一个类可以属于多个其他类。一个类(class)可以有另一个类(class),也可以有许多另一个类(class)。 (还有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

关于ruby-on-rails - 具有几乎相同属性的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com