Rails:一个继承的评论模型与两个略有不同的评论模型

时间:2011-12-26 05:37:24

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord data-modeling

我有当前(简化)模型设置 - 基本上是两个非常不同的模型:

Product
- Title

Restaurant
- Title

Comment
- Message
- gps_cords (sometimes?!)

我的目标是让人们根据以下条件随意对productsrestaurants发表评论:

  1. 如果某人对产品发表评论,评论应该只有message
  2. 当有人对餐馆发表评论时,评论应该有messagegps_cords值。
  3. 这些是我正在考虑的事情:

    场景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. 索引会去哪里?
    5. 非常感谢那些花时间阅读所有这些内容的人。

1 个答案:

答案 0 :(得分:0)

使用单表继承(STI),如方案1中所示 这是一个更好地理解它的链接:
http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

另外,请仔细阅读Finbarr上面评论中提到的问题。