我在rails应用程序上有一个ruby,我试图显示用户在索引页面上提供产品的星级评分。我只需要星数列,但我所做的一切似乎都无效,有人可以帮忙。
在我的index.html.erb中,我有以下代码:
Your star rating: <%= number_with_precision(product.user_star_rating, :precision => 1)%>
我的product.rb中的方法:
has_many :reviews
belongs_to :category
def user_star_rating
user_id = session[:user_id]
scope :userrating, -> { where('user_id = ?', user_id)}
self.reviews.user_id('no_of_stars')
end
在我的评论中.rb我有关系:
belongs_to :product
belongs_to :user
validates :review_text, :presence => { :message => "Review text: cannot be blank ..."}
validates :review_text, :length => {:maximum => 2000, :message => "Review text: maximum length 2000 characters"}
validates :no_of_stars, :presence => { :message => "Stars: please rate this book ..."}
在self.reviews.user_id('no_of_stars')行中我试图检索特定用户为产品提供的星数并返回它,但我不确定此方法中是否有任何代码是对的。
有人可以帮忙吗?提前谢谢。
答案 0 :(得分:0)
由于您提供的信息很少,我不太确定您是如何接近或构建逻辑的。但这就是我如何轻松获得特定产品的用户星级评分。
至少具有以下架构:
评论表
user_id, :integer
product_id, :integer
rating, :integer
使用以下内容设置模型:
<强> Review.rb 强>
belongs_to :user
belongs_to :product
<强> Product.rb 强>
has_many :reviews
<强> User.rb 强>
has_many :reviews
确保添加索引
然后,当用户为产品创建评论时,可以通过在控制器中提取正确的评论来访问它:
@review = Review.where(:user_id => params[:user_id], :product_id => params[:product_id]).first
然后在您的html.erb文件中,您可以显示用户对该产品的评分
"Your star rating: <%= @review.rating %>"