我有rails方法根据他们的投票(acts_as_votable)对博客进行排序。
方法是
# @allblogs will be some filtered blogs array
@fetch = []
@most_effective_votes = []
for blog in @allblogs
@most_effective_votes << [blog.id,blog.votes_for]
end
@most_effective_votes = @most_effective_votes.sort{|a,b| a[1]<=> b[1]}.Reverse
for mev in @most_effective_votes
@fetch << blog.Find(mev[0])
end
@allblogs = @fetch.Paginate(:per_page => 10,:page=>params[:page])
如何减少这些行数并将其更改为某个namedscope。 请提出一些建议。
答案 0 :(得分:0)
我认为你要做的事情必须用查询完成,而不需要对数组进行操作。
首先,@ allblogs应该是范围,而不是过滤后的数组。
其次,您可以通过以下方式更改您正在执行的操作:
Blog.order("DESC votes_for")
所以你的named_scope将是:
class Blog < ActiveRecord::Base
scope :with_most_votes, order("votes_for DESC")
end
@fetch将是@ allblogs.with_most_votes。
如果您需要更多帮助,请与我联系。