减少rails中具有命名范围的代码中的行数

时间:2012-01-03 06:27:44

标签: ruby-on-rails named-scope

我有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。 请提出一些建议。

1 个答案:

答案 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。

如果您需要更多帮助,请与我联系。