Я читал руководства по связям Rails, но я все еще не уверен, правильно ли я делаю это.Rails - полиморфные ассоциации с моделями объединения
У моего приложения есть пользователи и продукты.
Пользователь может вносить комментарии, обзоры и фотографии для этих Продуктов.
я понял, что я сделал бы присоединиться к модели под названием Статьи:
belongs_to :user
belongs_to :building
belongs_to :contributable, polymorphic: true
А потом для пользователя:
has_many :contributions, as: contributable
has_many :products, through: contributions
Продукты:
has_many :contributions, as: contributable
has_many :users, through: contributions
И затем, например, в моя Модель отзыва:
belongs_to :user
belongs_to :product
Я не чувствую, что делаю это правильно. В принципе, я хочу, чтобы вклад всегда имел ассоциированный Продукт и Пользователь, но хотел бы внести вклады, чтобы иметь возможность включать обзор, комментарий или фотографию.
Соединительная таблица с полиморфными ассоциациями - правильный путь сюда?
Получил благодарность! Нужен ли мне этот тип таблицы соединений и полиморфная ассоциация? Могу ли я также сделать что-то вроде Product has_many: обзоры, has_many: комментарии и т. Д., А для отзывов - to own_to: user и принадлежит_to: product? – Zephyr4434
Это может зависеть от того, сколько из этих типов будет использовано ваше приложение. Например, по мере того, как вы добавляете все больше и больше, 'Product' может закончиться большим использованием макросов' has_many', чем вам хотелось бы. Еще одна вещь, которую следует учитывать, - это часто запрашивать список всех трех типов. Например, если вы хотите график. В настоящее время вы можете делать '@ product.contributions' и просто сортировать их, как хотите. В противном случае вам придется делать '@ product.reviews',' @ product.comments' и '@ product.photos' и вручную объединять и сортировать их самостоятельно. Тем не менее, на самом деле он может быть хорошим в зависимости от вашего приложения. – veidt