Сокращение количества строк в коде с именованной областью в рельсах - PullRequest
0 голосов
/ 03 января 2012

У меня есть метод 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 голосов
/ 03 января 2012

Я думаю, что то, что вы пытаетесь сделать, может быть выполнено с помощью запроса без необходимости выполнения операций с массивами.

Прежде всего, @allblogs должен быть областью действия, а не фильтрованным массивом.

Во-вторых, это то же самое, что вы можете изменить все, что вы делали, используя:

Blog.order("DESC votes_for")

Таким образом, ваш named_scope будет:

class Blog < ActiveRecord::Base
    scope :with_most_votes, order("votes_for DESC")
end

И @fetch будетbe @ allblogs.with_most_votes.

Дайте мне знать, если вам нужна дополнительная помощь.

...