Проектирование базы данных Rails для модели, которая может использоваться одной из многих моделей - PullRequest
1 голос
/ 14 сентября 2011

У меня есть модель с именем feedback с атрибутами, рейтингом и обзором.product может иметь обратную связь, appointment может иметь обратную связь, user может иметь обратную связь.

Я мог бы добавить отдельные поля, такие как user_id, product_id, assign_id в таблице отзывов,но это не очень хорошее масштабируемое решение.Другой вариант, на мой взгляд, это использовать обобщенное поле reference_id и поле reference_model, которое можно заполнить именем модели, преобразованным в строку, а затем я могу вручную интерпретировать, если идентификатор, введенный в reference_id, принадлежит пользователю, продукту илиназначение.

Как лучше всего связать каждый отзыв с любой из 3 моделей в данный момент времени?

1 Ответ

5 голосов
/ 14 сентября 2011

Вы должны прочитать о Полиморфных Ассоциациях .

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Employee < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

class Product < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

Есть даже хороший RailsCast .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...