RubyonRails 3-Rails新手-了解评级应用程序的关系



我决定使用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_idrateable_type字段。另外,当然还有user_idrating_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%工作:(

祝你好运!

相关内容

  • 没有找到相关文章

最新更新