Ruby on Rails:通过关联

时间:2016-06-09 00:23:05

标签: ruby-on-rails ruby

我有三个模型:UsersSongsRatingsusersongs其他用户离开ratings。我想创建一个有序列表,其中排名最高的用户位于顶部。

我可以通过将其添加到user模型来显示收到的平均评分:

has_many :ratingsReceived, :through => :songs, :source => :ratings

然后在视图中:

<%= user.ratingsReceived.average(:overall) %>

我无法弄清楚如何制作一个有序列表。

感谢任何帮助。

以下是我的模型如何设置关联:

class Rating < ActiveRecord::Base
  belongs_to :song
  belongs_to :user

class User < ActiveRecord::Base
  has_many :songs, dependent: :destroy
  has_many :ratings
  has_many :ratingsReceived, :through => :songs, :source => :ratings

class Track < ActiveRecord::Base
  belongs_to :user
  has_many :ratings, dependent: :destroy

1 个答案:

答案 0 :(得分:3)

根据您的评论,如果user.ratingsReceived.average(:overall)完美运作,这应该可以完成。

User.all.sort_by {|user| user.ratingsReceived.average(:overall)}.last

它会为您提供评分最高的用户。

如果你想要列表,你可以使用它,

User.all.sort_by {|user| user.ratingsReceived.average(:overall)}.reverse