2010-08-05 4 views
4

Menu has_many: plats.Trier les modèles d'association dans Rails 3?

Je veux trier les plats par Dish.number.

Actuellement mon avis, il ressemble à:

<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> 

Comment puis-je faire cela?

Devrait-il être dans la vue ou le contrôleur?

Merci

Répondre

4

Dans votre contrôleur:

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

À votre avis:

<% @dishes.each do |dish| %> 
+0

ou si vous voulez être plus précis '@dishes = @ menu.dishes.all (: order => 'numéro DESC')' 'ou @dish es = @ menu.dishes.all (: order => 'numéro ASC') ' – Norto23

1

Je ne suis pas sûr si je comprends ce que vous essayez de faire, mais ... à itérer les plats triés par leur attribut de nombre, il vous suffit d'utiliser l'option: commande sur la vaisselle:

<% @menu.dishes.all(:order => :number).each do |dish| %> 
    ... 
<% end %> 
15

Ni l'un ni l'autre! :) --- le faire dans votre modèle définitions

Si vous voulez toujours commander la force:

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

class Dish 
    belongs_to :menu 
end 

Sinon, il suffit de commander dans la vue:

<% @menu.dishes.sort_by{|dish| dish.strength_id}.each do |dish| %> 
+0

Hey merci, très utile pour moi. –

0

Vous pouvez utiliser la order méthode:

<% @menu.dishes.order(number: :asc).each do |dish| %>