Rails Multi Table Наследование и Полиморфные Ассоциации - PullRequest
2 голосов
/ 29 февраля 2012

В настоящее время я занимаюсь разработкой приложения с использованием Rails 3.2 и столкнулся с небольшой проблемой.Я знаю, что об этом спрашивали сотни раз, но я не мог найти ответ, который решил бы это.Вот похожий ER: http://i.stack.imgur.com/x5V0G.png

Довольно очевидно, что я пытаюсь сделать.Я надеюсь, что ассоциация будет выглядеть следующим образом:

Supplier.first.theatres.first.events.first.orders
TourEvent.first.orders
Tour.first.orders

Теперь было бы неплохо иметь возможность определять мои модели следующим образом:

class Event < ActiveRecord::Base
  has_many :orders
  belongs_to :eventable, polymorphic: true

  # id, eventable_id, eventable_type, title, date, price
end

class TourEvent < Event
  belongs_to :tour

  # id, tour_id, rendezvous, guide_name
end

class Tour < ActiveRecord::Base
   has_many :events, class_name: 'TourEvent'

  # id, name, venue, duration
end

Но я понимаю, что этозарезервировано для "STI", а не "MTI".Любые идеи, как заставить мое решение работать без необходимости сложных миксины или плагины?Или это просто невозможно?

1 Ответ

0 голосов
/ 29 февраля 2012

Я думаю, что вы можете сделать что-то вроде этого:

suppliers 
has_many :events

events
belongs_to :suppliers
belongs_to :institutions
has_many :orders
# id, supplier_id, institution_id, ...

institutions
# id, type, title, ...
types: theatre, club, tour

orders
belongs_to :events
# id, event_id

Затем вы можете получить доступ к заказам событий:

Supplier.first.events.first.orders
...