Я не уверен в лучшей структуре для конкретной ситуации в Rails. У нас есть несколько типов мастерских. Администрация семинаров одинакова независимо от типа рабочего места, поэтому данные для мастерских находятся в одной модели. Мы собираем отзывы участников о семинарах, и вопросник различается для каждого типа семинара. Я хочу получить обратную связь о семинаре с моделью семинара, но класс соответствующей модели будет зависеть от типа семинара. Если бы я делал это в чем-то отличном от Rails, я бы создал абстрактный класс для WorkshopFeedback, а затем имел подклассы для каждого типа семинара: WorkshopFeedbackOne, WorkshopFeedbackTwo, WorkshopFeedbackThree. Я не уверен, как лучше всего справиться с Rails.несколько моделей в 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, а затем выбрать, например, @ workshop.feedback.feedback_one.
Есть ли лучший способ справиться с этой ситуацией? Было бы лучше использовать полиморфную ассоциацию для обратной связи? Или, может быть, с помощью модуля или Mixin для общего интерфейса обратной связи?
Примечание: Я избегаю использования одностраничного наследования здесь, потому что модели FeedbackOne, FeedbackTwo, FeedbackThree не имеют общих данных, поэтому в итоге я получаю большой малозаселенный стол с STI.
В моем первоначальном посте я должен был отметить, что я не хочу использовать STI, потому что разные обратные связи не разделяют много полей, поэтому я бы получил большую малонаселенную таблицу. –