У меня есть текущая (упрощенная) Настройка модели - в основном две разные модели:Rails: Один Наследуются комментарий модели против два немного Отличающегося Комментария Модель
Product
- Title
Restaurant
- Title
Comment
- Message
- gps_cords (sometimes?!)
Моя цель состоит, чтобы позволить людям оставлять комментарии на обоих products
и restaurants
по желанию на основе этого критерия:
- Когда кто-то комментарии на продукт комментарий должен просто иметь
message
. - Когда кто-то комментирует ресторан, комментарий должен иметь значение
message
AND agps_cords
.
Это то, что я рассматриваю:
Сценарий 1: Один большой стол задница ж/наследственные модели
class Product < ActiveRecord::Base
has_many :product_comments
end
class Restaurant < ActiveRecord::Base
has_many :restaurant_comments
end
class Comment < ActiveRecord::Base
# message -> string
# gps_cords -> string
# type -> string
end
class ProductComment < Comment
# only uses message
belongs_to :product
end
class RestaurantComment < Comment
# uses message AND gps_cords
belongs_to :restaurant
end
Сценарий 2: "Дубликат" усилия ж/два комментария модели
class Product < ActiveRecord::Base
has_many :product_comments
end
class Restaurant < ActiveRecord::Base
has_many :restaurant_comments
end
class ProductComment < ActiveRecord::Base
# message -> string
belongs_to :product
end
class RestaurantComment < ActiveRecord::Base
# gps_cords -> string
# message -> string
belongs_to :restaurant
end
Каков правильный способ моделирования модели с учетом:
- Производительность
- Возможность запрашивать «Все комментарии»
- «Rails путь»? (если есть)
- Куда будут индексироваться индексы?
Огромное спасибо людям, которые нашли время, чтобы прочитать все это.
Вы можете найти этот вопрос и ответ полезным: http://stackoverflow.com/questions/555668/single-table-inheritance-and-where-to-use-it-in-rails – Finbarr