ruby-on-rails – Ruby on Rails:根据大多数评论的平均评分对用
发布时间:2020-12-16 19:30:58 所属栏目:百科 来源:网络整理
导读:我可以显示商店内的商品和评论.如何获得最多评论的热门项目?我的评论在另一个数据库表中,而不是商店和项目. 调节器 @shop = Shop.find(params[:id]) @item = Item.where(:shop_name = @shop.name) 视图 % @item.each do |u| % %= u.reviews.average('rating
我可以显示商店内的商品和评论.如何获得最多评论的热门项目?我的评论在另一个数据库表中,而不是商店和项目.
调节器 @shop = Shop.find(params[:id]) @item = Item.where(:shop_name => @shop.name) 视图 <% @item.each do |u| %> <%= u.reviews.average('rating') %> <%= u.reviews.count %> <% end %> 有一种简单的方法,我可以根据最高评价和大多数评论订购?或者也许最好将最高评级和大多数评论分开,让用户点击链接进行过滤? 谢谢 编辑: 所以我有一个商店,项目,评论表. 在我的项目模型中 has_many :reviews,as: :reviewable has_many :shops 在我的评论模型和商店模型是 belongs_to :user 在我的评论表中,它设置为当用户评论项目时,它会向数据库添加记录,并使用与该项目关联的所有记录的平均值并在商店中显示它. 解决方法
如果我理解你的ER模型,你可以试试这个:
@items = Item.where(:shop_name => @shop.name).joins(:reviews) .select("items.id,avg(reviews.rating) as average_rating,count(reviews.id) as number_of_reviews") .group("items.id") .order("average_rating DESC,number_of_reviews DESC") 可能会有一些错别字,但你明白了.也许你可能想要创建某种加权分数,否则在这种情况下,一个5星评价的项目将高于具有五十四星评价的项目. 我在select块中定义的所有自定义列都是字符串类型,因此如果您对它们进行任何算术运算,则需要手动对它们进行类型转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |