Сортировать ассоциации моделей в Rails 3? - PullRequest
4 голосов
/ 06 августа 2010

Меню has_many: блюда.

Я хочу отсортировать блюда по Dish.number.

В настоящее время, на мой взгляд, это выглядит так:

<table class="menu">
  <% @menu.dishes.each do |dish| %>
    <div class="dish">
      <tr>
        <td>
          <div class="dish_div dish_name">
            <% if @menu.name != 'Övrigt' && @menu.name != 'Box to go' %>
              <span class="dish_name"><%= "#{dish.number}. #{dish.name}" %></span>
            <% else %>
              <span class="dish_name"><%= "#{dish.name}" %></span>
            <% end %>

            <% if dish.strength_id == 2 %>
              <%= image_tag('chili.png') %>
            <% elsif dish.strength_id == 3 %>
              <%= image_tag('chili.png') %>
              <%= image_tag('chili.png') %>
            <% elsif dish.strength_id == 4 %>
              <%= image_tag('chili.png') %>
              <%= image_tag('chili.png') %>
              <%= image_tag('chili.png') %>
            <% end %>
          </div>
          <div class="dish_div"><%= "#{dish.description}" %></div>
          <div class="dish_div dish_price"><%= "#{dish.price} kr" %></div>
        </td>
      </tr>
    </div>
  <% end %>
</table>

Как сделатьЯ так делаю?

Должно ли это быть в поле зрения или в контроллере?

Спасибо

Ответы [ 4 ]

15 голосов
/ 06 августа 2010

Ни!:) --- делайте это в определениях вашей модели

Если вы всегда хотите заказать на прочность:

class Menu
  has_many :dishes, :order=>'strength_id DESC'
end

class Dish
  belongs_to :menu
end

В противном случае, просто заказывайте в виде:

<% @menu.dishes.sort_by{|dish| dish.strength_id}.each do |dish| %>
4 голосов
/ 06 августа 2010

В вашем контроллере:

def list
  @dishes = @menu.dishes.all(:order => :number)
end

На ваш взгляд:

<% @dishes.each do |dish| %>
1 голос
/ 06 августа 2010

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

<% @menu.dishes.all(:order => :number).each do |dish| %>
  ...
<% end %>
0 голосов
/ 11 ноября 2015

Вы можете использовать метод order :

<% @menu.dishes.order(number: :asc).each do |dish| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...