Генерация модели отца
rails g model brand name:string
Семена модели отца
Brand.create name: 'Apple'
Brand.create name: 'Samsung'
Генерация 2 модели ребенка
rails g model phone name:string brand:references
rails g model home_appliance name:string brand:references
Семена детей
apple = Brand.first
Phone.create name: 'Iphone X', brand: apple
Phone.create name: 'Iphone 11', brand: apple
HomeAppliance.create name: 'Apple TV', brand: apple
HomeAppliance.create name: 'Homepod', brand: apple
samsung = Brand.last
Phone.create name: 'Galaxy A30', brand: samsung
Phone.create name: 'Galaxy Tab s6', brand: samsung
HomeAppliance.create name: 'Washing machine', brand: samsung
HomeAppliance.create name: 'Refrigerator', brand: samsung
В приложении / models / brand.rb
has_many :phones
has_many :home_appliances
Отец нашел сына
apple.home_appliances
apple.phones
Сын нашел отца
phone = Phone.last
phone.brand
Добавить пример полиморфности c
Добавление продавца, который может продавать телефон и устройство HomeAppliance
rails g model salesman name:string
Отношение между продавцом и продуктом (телефон HomeAppliance) - это MM, поэтому для этого нам нужно создать третью таблицу
rails g model product_sold salesman:references product_id:integer product_type:string
В приложении / models / product_sold.rb добавьте
belongs_to :product, polymorphic: true
Итак
will = Salesman.create name: 'Will'
will_first_sale = ProductSold.create salesman: will, product: Phone.first
will_second_sale = ProductSold.create salesman: will, product: HomeAppliance.last
Чтобы увидеть все, что будет продано добавьте в app / models / salesman.rb
has_many :product_sold
Теперь вы не можете запустить это
products = will.product_sold.map(&:product)
В продуктах у вас есть модель Phone и HomeAppliance
Здесь вы нашли еще один полиморф c примеры