наследование рельсов внешнего ключа - PullRequest
0 голосов
/ 18 мая 2018

Я большой новичок, у меня есть следующий сценарий на моем рельсе: я хочу реализовать родительский класс:

Equipment:   
ID PK  
Brand  
IP


...

и некоторые дочерние классы

Printer:

ID_EQUIPMENT PK and FK 

...

Компьютеры:

ID_EQUIPMENT PK and FK


...

Телефоны:

ID_EQUIPMENT PK and FK 
...

Среди прочих

Но у меня 2 проблемы, первая - как настроитьпервичный ключ родительского класса, чтобы быть первичным ключом дочерних классов.Другой способ - реализовать это в контроллере и маршрутах.

Я на некоторое время застрял в этом

1 Ответ

0 голосов
/ 19 мая 2018

Похоже, вы пытаетесь использовать однотабличное наследование (например, все данные хранятся в одной таблице, называемой equipment)?

, если это так, вы можете посмотреть здесь .

по существу, вы определяете equipment с полем типа:

rails g model Equipment brand ip type

Это создаст файл модели оборудования (и файл миграции БД для полей)

# app/models/equipment.rb
class Equipment < ApplicationRecord
end

Затем вы можете создать несколько дополнительных файлов моделей, которые наследуют оборудование:

# app/models/printer.rb
class Printer < Equipment
end

Когда вы создаете принтер, он автоматически устанавливает тип = Printer

> Printer.create(brand: 'HP', ip: '10.0.0.1')
> equip = Equipment.find_by_ip('10.0.0.1')
> equip.type
=> "Printer"

> equip.is_a?(Printer)
=> true

> equip.is_a?(Equipment)
=> true

Реализация этого в контроллерах и маршрутах зависит от того, что вы хотите, чтобы наше приложение делало.может быть, начать с работы STI, а затем выяснить, как вы хотите взаимодействовать с этими классами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...