【发布时间】:2014-01-18 03:02:12
【问题描述】:
我正在设置一个简单的 ruby/rails 应用程序,用户可以在其中查看专辑。在专辑的显示页面上,我通过专辑控制器中的此代码平均与该专辑相关的所有用户评论
def show
@album = Album.find_by_id(params[:id])
if @album.reviews.present?
@ratings = Review.where(album_id: @album).average(:rating).truncate(2)
else
render 'show'
end
end
这给了我每张专辑的平均评分。在我的主页(通过不同的控制器路由)上,我想显示平均评分最高的前 7 个专辑。
我最初所做的是将这段代码放入单独的主页控制器中:
@albums = Album.all
@ratings = @albums.each {|album| album.reviews.average(:rating).to_f}
@ranked_ratings = @ratings.sort_by {|rating| rating}
@top_seven = @ranked_ratings.reverse[0...7]
我以为我找到了解决方案,直到我意识到我所展示的只是输入数据库的最后 7 张专辑。
回到绘图板,我已经能够在我的控制器中使用以下代码获得所有专辑的数组(数组中的每个元素都是与该专辑关联的评论列表):
@albums = Album.all
@ratings = @albums.collect {|album| album.reviews}
我一直在试图弄清楚如何循环查看@ratings 并找到每个专辑 ID 的平均评分,然后按最高平均评分对这些记录进行排序并在视图中显示它们。
【问题讨论】:
标签: ruby-on-rails sqlite ruby-on-rails-4 rails-activerecord has-many