在您需要找到解决方案之前,rails 非常有趣,而且需要三天时间,但没有运气!;-(
如何按每个条目的 has_many 关联中的最新条目排序?
解释:
我Video
通过关联的模型Score
(带有字段ranking_score
)对模型进行排名。数据库是一个postgreSQL。因为我会经常为视频添加分数,所以我需要按每个视频的最新分数条目对视频进行排序。
Video.all(:include => :scores, :order => "scores.ranking_score DESC")
...按预期工作,直到我为视频添加新的分数条目(我不更新,因为我会有关于排名的统计数据)。
我还尝试了所有品种(DESC 和 ASC),我重新排序了优先级,但没有运气:
Video.all(:include => :scores, :order => "scores.created_at DESC, scores.ranking_score")
和
Video.all(:include => :scores, :order => "scores.ranking_score, scores.created_at")
等等。
我在网上搜索,试图找出 postgreSQL 命令等等。但是,作为一个菜鸟(现在在轨道上呆了 6 周),我需要帮助,拜托。
这是我的代码:
视频型号:
class Video < ActiveRecord::Base
.
has_many :scores
.
end
评分模型:
class Score < ActiveRecord::Base
attr_accessible :ranking_score, :video_id
belongs_to :video, :foreign_key => :video_id
def position
self.class.count( :conditions => ['ranking_score >= ?', self.ranking_score])
end
end
视频控制器:
class VideosController < ApplicationController
def index
setup_videos
@video ||= Video.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @video }
end
end
.
private
def setup_videos
@videos = Video.all(:include => :scores, :order => "scores.ranking_score DESC")
@user = current_user
end
end
如您所见,为了验证排名,我包含了一个方法位置,因为我需要一个特定于用户的视图,其中仅列出用户视频,但显示了总体排名(不同的问题,因为这样它不适用于每个条目的多个条目视频)
_ranking.html.erb(呈现在“索引”中)---没有 HTML 标签:
<% @videos.each.with_index do |video, index| %>
<%= index.+1 %>
ranking <%= video.scores.last.ranking_score %>
postition <%= video.scores.last.position %>
<% end %>
<% @user.videos.count %>
感谢您的时间!约翰