【发布时间】:2010-07-27 18:45:04
【问题描述】:
我有一个根据投票数排序的“问题”数组,并且想在当前选择的问题之前和之后立即显示问题。
假设当前选择的问题存储在变量@question 中,我将显示与同一用户关联的其他问题的列表。此代码按票数排序:
questions = Question.find(:all, :conditions => {:user => @question.user}).sort { |q1,q2| q2.votes.length <=> q1.votes.length}
现在我如何在该列表中挑选出@question 之前的问题和之后的问题?
【问题讨论】:
-
你在这里做的事情闻起来很糟糕!如果您有 n 个问题,则需要执行 n+1 个查询以获得问题数组。请了解什么是计数器缓存 - railscasts.com/episodes/23-counter-cache-column - 并使用该列对您的问题进行排序:
Question.find(:all, :conditions => {:user => @question.user}, :order => 'votes_count DESC')。或者,您可以加入您的投票模型并添加一个带有count()SQL 函数的列并按它排序。 -
谢谢,我观看了 railscast,这看起来确实是按票数对问题进行排序的更好方法。但并没有完全解决问题,我仍然不知道如何在该有序数组中定位我当前的问题,并只显示它之前和之后的问题。
标签: ruby-on-rails arrays sorting