我决定使用Rails3。这是我第一次使用Rails,我想让社区对如何实现以下场景有意见。
我创建了以下模型:Item, Rating, User
我希望该应用程序的工作方式为:
1( Item has many Ratings
2( User can submit many Ratings
-每个项目只有一个用户提交评分
3( Specific rating can can only have one Item and one User
基于此,我希望能够:
1( Show all ratings for an item
2( Show all items rated by a particular user
看起来很简单。非常感谢任何帮助或指导。
我会使用多态关联:
# file: app/models/item.rb
class Item < ActiveRecord::Base
has_many :ratings, :as => :rateable
end
# file: app/models/user.rb
class User < ActiveRecord::Base
has_many :ratings
has_many :rated_items, :through => :ratings, :source => :rateable, :source_type => "Item"
end
# file: app/models/rating.rb
class Rating < ActiveRecord::Base
belongs_to :user
belongs_to :rateable, :polymorphic => true
validates_uniqueness_of :user_id, :scope => :rateable
end
这样,用户可以对不同的项目进行评分,但每个项目只能进行一次。
要实现这一点,您需要ratings
表中的rateable_id
和rateable_type
字段。另外,当然还有user_id
和rating_score
之类的。
最大的优点是您可以添加任意数量的rateables
。例如,如果你想对Song
模型进行评级,那么你可以简单地实现它:
# file: app/models/song.rb
class Song < ActiveRecord::Base
has_many :ratings, :as => :rateable
end
显示Item
的分级:item.ratings
显示User
:user.rated_items
评定的所有项目
附言:我英语语法不好,如果拼写错了rateable
,请纠正我附言:这个实现是未经测试的,我直接写出来的,所以不能保证它会100%工作:(
祝你好运!