具有几乎相同属性的模型

亚历克斯·安吉里尼

我是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有多个具有相同属性名称的模型属性的Spring表单路径

来自分类Dev

从列表生成具有相同属性的对

来自分类Dev

创建具有相同属性的方法

来自分类Dev

合并具有相同属性的元素

来自分类Dev

创建具有相同属性的数据模型的最佳实践

来自分类Dev

对具有相同属性名称的多个模型进行不干扰的验证

来自分类Dev

使用Sunspot查询具有不同属性的多个模型

来自分类Dev

使用Sunspot查询具有不同属性的多个模型

来自分类Dev

Javascript-添加具有不同值的相同属性

来自分类Dev

具有相同属性名称的AutoMapper TwoWay映射

来自分类Dev

GraphViz文件中具有相同属性的节点组

来自分类Dev

计算具有相同属性值的对象

来自分类Dev

在matplotlib中绘制具有相同属性的多个函数

来自分类Dev

Sparql查询:查找具有相同属性对象的对象

来自分类Dev

Rails:尝试渲染具有相同属性的用户的图像

来自分类Dev

如何排列具有相同属性值的对象数组?

来自分类Dev

如何创建具有相同属性\方法的组件

来自分类Dev

具有相同属性的元素的定位器

来自分类Dev

删除具有相同属性值的重复实体

来自分类Dev

CSS:调用具有相同属性的任何元素

来自分类Dev

解析具有相同属性但名称不同的JSON文件

来自分类Dev

如何添加具有相同属性的多个UIImageViews

来自分类Dev

计算具有相同属性的div并显示结果

来自分类Dev

TreeView删除具有相同属性的节点

来自分类Dev

LinQ GroupBy对具有相同属性的嵌套元素

来自分类Dev

如何选择具有相同属性的后续行

来自分类Dev

更少:2个具有相同属性的mixin

来自分类Dev

实体框架:具有相同属性的继承

来自分类Dev

Rails:尝试渲染具有相同属性的用户图像

Related 相关文章

热门标签

归档