0

У меня есть текущая (упрощенная) Настройка модели - в основном две разные модели:Rails: Один Наследуются комментарий модели против два немного Отличающегося Комментария Модель

Product 
- Title 

Restaurant 
- Title 

Comment 
- Message 
- gps_cords (sometimes?!) 

Моя цель состоит, чтобы позволить людям оставлять комментарии на обоих products и restaurants по желанию на основе этого критерия:

  1. Когда кто-то комментарии на продукт комментарий должен просто иметь message.
  2. Когда кто-то комментирует ресторан, комментарий должен иметь значение message AND a 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 

Каков правильный способ моделирования модели с учетом:

  1. Производительность
  2. Возможность запрашивать «Все комментарии»
  3. «Rails путь»? (если есть)
  4. Куда будут индексироваться индексы?

Огромное спасибо людям, которые нашли время, чтобы прочитать все это.

+0

Вы можете найти этот вопрос и ответ полезным: http://stackoverflow.com/questions/555668/single-table-inheritance-and-where-to-use-it-in-rails – Finbarr

ответ

0

Использование Single Table Inheritance (STI), как и в сценарии 1.
Вот ссылка для лучшего понимания этого:
http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

Кроме того, пройти через вопрос обозначаемого в комментарии выше, Finbarr.

+0

Я действительно прочитал оба перед отправляя мой вопрос. Мне непонятно, почему я должен использовать STI против чего-то вроде «комментария» (полиморфизма) –