【问题标题】:Best way to set up a Datamodel or Schema Relationship using Ruby-on-Rails and Activerecord使用 Ruby-on-Rails 和 Activerecord 设置数据模型或模式关系的最佳方法
【发布时间】:2019-01-21 05:31:42
【问题描述】:

我正在创建一个 Web 应用程序,该应用程序允许用户通过分配和购买零件的小时数来track/log 他们的车辆restoration/maintenance 成本。我需要帮助正确设置数据库架构和模型关系。请记住,虽然我知道这可以简化,但我需要至少有 5 个模型来完成这项任务。

这是我到目前为止的想法。 (图片中的VSP是Vehicle_Service_Part的缩写,旨在成为模型Vehicle、Service和Part之间的“3 ID属性表”链接。)虽然没有显示在架构代码中,但每个类都会自动创建具有自己唯一的主键:id。 我还差 2 分才能发布图片...请参阅link 的数据模型

这是我的 Rails 架构:

ActiveRecord::Schema.define(version: 2019_01_21_042407) do
  create_table "owners", force: :cascade do |t|
    t.string "name"
    t.string "street"
    t.string "city"
    t.string "state"
    t.integer "zip"
    t.string "phone_number"
    t.string "email"
  end

  create_table "parts", force: :cascade do |t|
    t.string "part_number"
    t.string "part_name"
    t.integer "cost"
    t.string "part_type"
    t.integer "quantity"
  end

  create_table "services", force: :cascade do |t|
    t.string "date"
    t.string "work_description"
    t.integer "car_miles"
    t.integer "work_hours"
  end

  create_table "vehicle_service_parts", force: :cascade do |t|
    t.integer "vehicle_id"
    t.integer "service_id"
    t.integer "part_id"
  end

  create_table "vehicles", force: :cascade do |t|
    t.string "make"
    t.string "model"
    t.integer "year"
    t.string "vin"
    t.string "engine"
    t.string "car_type"
    t.string "color"
  end

  create_table "vendors", force: :cascade do |t|
    t.string "name"
    t.string "contact"
    t.string "website"
    t.string "location"
  end
end

这是我的模型关系:

class Owner < ApplicationRecord
    has_many :vehicles
    has_many :vehicle_service_parts, through: :vehicles
end

class Vehicle < ApplicationRecord
    belongs_to :owner
    has_many :vehicle_service_parts
    has_many :services, through: :vehicle_service_parts
    has_many :parts, through: :vehicle_service_parts
end

class Service < ApplicationRecord
    has_many :vehicle_service_parts
    has_many :vehicles, through: :vehicle_service_parts
    has_many :parts, through: :vehicle_service_parts
end

class Part < ApplicationRecord
    belongs_to :vendor
    has_many :vehicle_service_parts
    has_many :vehicles, through: :vehicle_service_parts
    has_many :services, through: :vehicle_service_parts
end

class VehicleServicePart < ApplicationRecord
    belongs_to :vehicle
    belongs_to :service
    belongs_to :part
    has_many :owners, through: :vehicles
    has_many :owners, through: :parts
end

class Vendor < ApplicationRecord
    has_many :parts
    has_many :vehicle_service_parts, through: :parts
end

根据我的模型和他们之间的关系,我最终希望完成一些事情,其中​​一些我认为可以使用给定的关系设置来完成,而其他一些我很遗憾没有太多的知识或技能从哪里开始。

  1. 车主可以拥有多辆具有不同记录集的车辆。

  2. 车辆可以使用一个零件拥有多个服务,并最终从多个服务中获得多个零件。

  3. 模型类Part 包含一个属性:part_type,该属性将被分配一个来自分类列表的字符串,包括但不限于“引擎”、“悬架”、“刹车”...等。允许查看者查看给定车辆:part_type "engine" 的所有总零件/成本/小时/服务。

  4. 1234563 /p>
  5. 是否可以完成 4. 同时在一项服务中创建/添加多个部分?例如,换油将被视为Service 类的单个实例,但将与Part 类的多个实例相关联,包括机油过滤器实例和机油实例。机油滤清器和机油都是两个不同的部件,但位于一个服务实例下。

  6. 查看者可以看到汽车上所有不同的零件以及总成本。

  7. 查看者可以查看从其购买汽车零件的所有供应商。

我们将不胜感激任何帮助、指导或建议!

【问题讨论】:

    标签: ruby-on-rails database sqlite activerecord data-modeling


    【解决方案1】:

    我对你的建议是设计如下数据库:

    1. 所有者 -> has_many -> 车辆

      车主

    2. 车辆 -> has_many -> 零件

      vehicles

    3. parts -> has_many -> 服务

      服务

    对于您的第四点,是的,您可以通过accepts_nested_attributes_for 概念来实现这一点。在您的服务创建表单中,您可以为部件添加字段。按照这里的指南https://www.sitepoint.com/complex-rails-forms-with-nested-attributes/

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2018-04-05
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多