gpt4 book ai didi

ruby-on-rails-3 - Ruby on Rails 3 - Rails 新手 - 了解评级应用程序的关系

转载 作者:行者123 更新时间:2023-12-05 01:31:16 25 4
gpt4 key购买 nike

我决定使用 Rails 3 构建我的最新站点。这是我第一次使用 Rails,我想就如何执行以下场景征求社区意见。

我创建了以下模型:Item、Rating、User

我希望该应用程序作为:

1) 项目有很多评级
2) 用户可以提交多个评分 - 每个项目只能有一个用户提交评分
3) 特定评分只能有一个Item和一个User

基于此我希望能够:

1) 显示一个项目的所有评分
2) 显示特定用户评价的所有项目

看起来很简单。非常感谢任何帮助或指导。

最佳答案

我会使用多态关联:

# 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.rated_items

附言我的英语语法不好,所以如果拼写错误请纠正我 rateable
附言此实现未经测试,我是直接从脑海中写出来的,所以不能保证它会 100% 有效:)

祝你好运!

关于ruby-on-rails-3 - Ruby on Rails 3 - Rails 新手 - 了解评级应用程序的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com