2011-07-21 4 views
5

Bu benim görünümümdeki kodum. Denetleyici, sadece @ kategorisini modelden alıyor.Rails 2.3'de nasıl döngü yapılır?

Bu tür çalışmıyor. Nihayetinde isme göre alfabetik olarak sıralamak gerekiyor.

<%- @category.brands.sort_by{|brand| brand.name}.each do |brand| -%> 
    <li <%= "class='current'" if brand == @brand %>><%= link_to(brand.name, [@category, brand]) %></li> 
<%- end -%> 

Herhangi bir fikir? yaygın olarak sıralamak aynı alanda tarafından <=> yöntemi define (ve isteğe bağlı olarak Karşılaştırılabilir dahil) modeline ve sadece model.sort arayıp Eğer

<% @category.brands.sort { |a,b| a.name <=> b.name }.each do |brand| %> 
    <li <%= "class='current'" if brand == @brand %>> 
    <%= link_to(brand.name, [@category, brand]) %> 
    </li> 
<% end %> 

cevap

10

doğrudan sıralama işlevini kullanırsınız İşe yaramalı.

class Brand < AcvtiveRecord::Base 
    def <=> other 
    self.name <=> other.name 
    end 
end 

görünüm:: o bir dernek değildi

<% @category.brands.sort.each do |brand| %> 
<li <%= "class='current'" if brand == @brand %>> 
    <%= link_to(brand.name, [@category, brand]) %> 
</li> 
<% end %> 

ben denetleyicisi bunu sıralamak veya sonra sadece görüntülemek resmedebilirler modeli dönmek zorunda kalacak modelinde

manzaralı. Sonra denetleyicisi

(bu bir subcollection değilse)

@brands = Brand.all.sort 

görünüm:

<% @brands.each do |brand| %> 
<li <%= "class='current'" if brand == @brand %>> 
    <%= link_to(brand.name, [@category, brand]) %> 
</li> 
<% end %> 
1

:

+1

Bu ghayes yöntemi daha "doğru" ama yaklaşık olarak aynı çalışacaktır. Bu yaklaşımları bir melez yapabilir ve sadece başka bir yerde yapmayacaksanız, uzay gemisi operatörünü tanımlamak yerine, denetleyicideki argümanlarla sıralamayı çağırabilir. – Karl

+0

uzay gemisi operatörü haha? Daha önce hiç böyle bir şey demediğini duymadım. Bunu sevdim. – loosecannon