这听起来像是一个多态关联的好案例。
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :reviewable, :polymorphic => true
end
class Merchant < ActiveRecord::Base
has_many :reviews, :as => :reviewable
end
class Product < ActiveRecord::Base
has_many :reviews, :as => :reviewable
end
然后,您可以分别致电@merchant.reviews
并@product.reviews
获取商家和产品的评论。您可以调用@review.reviewable
以获取已审核的对象。
多态关联基于如下表结构:
--------------------------------------------------
id | integer
user_id | integer
reviewable_id | integer
reviewable_type | string
value | integer
created_at | timestamp without time zone
updated_at | timestamp without time zone
--------------------------------------------------
该reviewable_type
列包含“可审查”对象的类名和reviewable_id
它的 id。在迁移中,您可以使用以下方法创建这些列:
t.references :reviewable, :polymorphic => true