:通过has_many协会最新条目订购?怎么样?

时间:2012-12-27 19:14:46

标签: ruby-on-rails ruby postgresql

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命令等等。但是,如果你想要帮助的话,那么我现在需要帮助。

这是我的代码:

视频模型:

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 %>

感谢您的时间! JOH

1 个答案:

答案 0 :(得分:1)

我很难理解你的要求。但是 - 您是否考虑过使用每个视频记录缓存最高排名?

您可以在名为highest_ranking的视频中添加另一列,该列会在分数after_save操作或类似内容中更新(取决于分数更新频率)。

这样可以省去加入乐谱订购视频的麻烦。