Я создаю веб-приложение, которое позволяет пользователю track/log
его транспортное средство restoration/maintenance
расходы на выделенные часы и приобретенные детали. Мне нужна помощь в настройке схемы базы данных и модели отношений правильно. Пожалуйста, имейте в виду, хотя я понимаю, что это можно упростить, мне нужно как минимум 5 моделей для этого задания.
Вот что я придумала до сих пор.
(VSP на изображении - сокращение от Vehicle_Service_Part
, которое предназначено для связи «таблицы атрибутов 3 ID» между моделями Vehicle, Service и Part.) Хотя это не показано в коде схемы, каждый класс будет создан автоматически со своим уникальным первичным ключом :id
.
Мне не хватает 2 баллов для возможности публикации изображений ... см. Модели данных на ссылке
Вот моя схема рельсов:
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
Основываясь на моих моделях и их отношениях, я бы хотел в конечном итоге выполнить несколько вещей, некоторые из которых, я думаю, уже могут быть достигнуты с помощью данной установки отношений, а другие, к сожалению, у меня не так много знаний или навыков. с чего начать.
Владельцы могут иметь несколько транспортных средств с разными наборами записей.
Транспортное средство может иметь множество сервисов, использующих деталь, и, в конечном итоге, иметь множество деталей из множества сервисов.
Класс модели Part
содержит атрибут :part_type
, которому будет назначена строка из категоризированного списка, включая, но не ограничиваясь, "двигатель", "подвеска", "тормоза" ... и т. Д. позволяя зрителю увидеть все общие части / затраты / часы / услуги :part_type "engine"
данного транспортного средства.
Когда зритель создает новый Service
, я хотел бы иметь возможность создать новый экземпляр класса Part
с данными атрибутов перспективы, которые будут вводиться через формы и затем добавляться в базу данных.
Можно ли выполнить 4. при создании / добавлении нескольких частей в рамках одной услуги? Например, замена масла будет считаться одним экземпляром класса Service
, однако будет связана с несколькими экземплярами класса Part
, включая экземпляр масляного фильтра и экземпляр масла. И масляный фильтр, и масло - это две разные части, но размещенные в рамках одного обслуживания.
Зритель может увидеть все различные детали, обслуживаемые на их автомобиле, а также общие расходы.
Зритель может видеть всех поставщиков, у которых были куплены запчасти для их автомобилей.
Буду очень признателен за любую помощь, направление или совет!