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

Ruby on rails 减少rails中具有命名范围的代码中的行数,ruby-on-rails,named-scope,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

我使用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])
#@allblogs将是一些经过筛选的blogs数组
@获取=[]
@最有效票数=[]
对于@allblogs中的blog
@最有效投票参数[:页])
如何减少这些行数并将其更改为某个命名范围。
请给出一些建议。

我认为您正在尝试的操作可以通过查询完成,而无需对数组进行操作

首先,@allblogs应该是一个作用域,而不是一个过滤数组

其次,它同样意味着你可以通过使用以下工具来改变你所做的一切:

Blog.order("DESC votes_for")
因此,您的命名范围将是:

class Blog < ActiveRecord::Base
    scope :with_most_votes, order("votes_for DESC")
end
classblog
而@fetch将是@allblogs.com,拥有最多的选票


如果您需要更多帮助,请告诉我。

不,我只能使用allblogs,不能使用Blog.all。因为所有博客都是从其他函数返回的值。我试过使用范围,但它不起作用。我尝试了使用allblogs.find(:all,:include=>[“投票”],:conditions=>[“voces.voteable_type='Blog'和voces.voteable_id=blogs.id和voces=?”,true],:group=>[“voces.voteable_id”],:order=>[“count(voces.id)desc”]),它们在控制台中工作。并在服务器端抛出参数错误。为什么?不能将作用域应用于数组。你能告诉我返回所有博客的函数吗?