У меня есть текущая (упрощенная) модель настройки - в основном две очень разные модели:
Product
- Title
Restaurant
- Title
Comment
- Message
- gps_cords (sometimes?!)
Моя цель - позволить людям оставлять комментарии как products
, так и restaurants
по своему усмотрению, исходя из следующих критериев:
- Когда кто-то комментирует продукт, комментарий должен просто иметь
message
.
- Когда кто-то комментирует ресторан, комментарий должен иметь значение
message
И gps_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
Как правильно смоделировать это с учетом:
- Производительность
- Возможность запроса "Все комментарии"
- "Рельсовый путь"? (если есть)
- Куда делись индексы?
Большое спасибо людям, которые нашли время, чтобы прочитать все это.