Я не уверен в лучшей структуре для конкретной ситуации в Rails. У нас есть несколько типов семинаров. Администрация семинаров является одинаковой независимо от типа семинара, поэтому данные для семинаров представлены в единой модели. Мы собираем отзывы участников о семинарах, и анкеты различны для каждого типа семинаров. Я хочу получить обратную связь о мастерской от модели мастерской, но класс связанной модели будет зависеть от типа мастерской. Если бы я делал это не в Rails, я бы создал абстрактный класс для WorkshopFeedback, а затем имел подклассы для каждого типа мастерской: WorkshopFeedbackOne, WorkshopFeedbackTwo, WorkshopFeedbackThree. Я не уверен, как лучше всего справиться с этим с помощью Rails.
В настоящее время у меня есть:
class Workshop < ActiveRecord::Base
has_many :workshop_feedbacks
end
class Feedback < ActiveRecord::Base
belongs_to :workshop
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
end
class FeedbackOne < ActiveRecord::Base
belongs_to :feedback
end
class FeedbackTwo < ActiveRecord::Base
belongs_to :feedback
end
class FeedbackThree < ActiveRecord::Base
belongs_to :feedback
end
Это не самый чистый способ получить доступ к обратной связи от модели мастерской, так как для получения правильной обратной связи потребуется логика, исследующая тип семинара и затем выбрав, например, @ workshop.feedback.feedback_one.
Есть ли лучший способ справиться с этой ситуацией? Было бы лучше использовать полиморфную ассоциацию для обратной связи? Или, может быть, использовать модуль или Mixin для общего интерфейса обратной связи?
Примечание. Я избегаю использования наследования отдельных таблиц, потому что модели FeedbackOne, FeedbackTwo, FeedbackThree не разделяют много общих данных, поэтому я получу большую малонаселенную таблицу с STI.