Ruby on Rails: как отсортировать данные в массиве активных объектов записи перед итерацией? - PullRequest
1 голос
/ 27 декабря 2010

Каков наилучший способ сортировки массива объектов Active Record по полю?

Этот массив является полем объекта, link_pages, и я хочу, чтобы он сортировался по полю "sequence "

<% @menu_bar.link_pages.each do |lp| %>
                <li id="page_<%= lp.id%>" class="ui-state-default">
                  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>

                  <font size=5><%= lp.name %></font> | 
                  <%= link_to "remove",
                         :controller => "admin/menu_bars",
                         :action => :remove_page_from_menu,
                         :page => lp.id,
                         :id => @menu_bar.id %>
                </li>
          <% end %>

Может быть, есть способ сделать @menu_bar.link_pages.sort_by_sequence.each do, что было бы замечательно, но я просто не знаю.

Ответы [ 2 ]

5 голосов
/ 27 декабря 2010
@menu_bar.link_pages.sort_by { |e| e.sequence }.each do |lp|
  . . .
2 голосов
/ 27 декабря 2010

Действительно ли link_pages - массив объектов activerecord?

Что произойдет, если вы добавите это в представление?

<%= debug @menu_bar.link_pages.class %>

Может произойти две вещи.Он может напечатать «Array» или «ActiverecordThing» (что-то похожее на это, определенно не Array).

Если у вас действительно есть Array, используйте решение DigitalRoss.Если у вас есть «ActiverecordSomething», то создайте named_scope , чтобы вы могли легко использовать повторно:

# Assuming that your model name is "Page"
class Page < ActiveRecord::Base
  ...
  named_scope :sorted_by_sequence, :order => 'pages.sequence ASC'
  ...
end

Тогда вы можете сделать:

<% @menu_bar.link_pages.sorted_by_sequence each do |lp| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...