2010-12-26 10 views
1

フィールドでアクティブレコードオブジェクトの配列を並べ替える最も良い方法は何ですか?Ruby on Rails:反復処理の直前にアクティブなレコードオブジェクトの配列内のデータをソートする方法は?

この配列はオブジェクト、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を行うための方法があるが、ちょうどIわからない。

+0

は、バージョン2または3をレール? – DGM

+0

バージョン2.3.8だと思います。 def not 3 – NullVoxPopuli

答えて

5
@menu_bar.link_pages.sort_by { |e| e.sequence }.each do |lp| 
    . . . 
+0

'@menu_bar.link_pages.sort_by&:sequence.each do | lp |'は、省略形の_to_proc_です。また、[このSOの議論]を参照してください(http://stackoverflow.com/questions/1278510/sort-arurn-returned-by-activerecord-by-date-or-any-other-column) – Epigene

2

link_pages本当にのActiveRecordオブジェクトの配列ですか?

これをビューに追加するとどうなりますか?

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

2つのことが起こる可能性があります。それは "配列"を印刷することができますし、 "ActiverecordThing"(それと似たもの、つまり配列ではありません)を印刷することができます。

実際にアレイを使用している場合は、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| %> 
+0

それは滑らかです...私は私は複数の正解を選ぶことができればいいと思っています.... =( – NullVoxPopuli

+0

あなたは両方の回答をupvoteすることができます^^ – kikito

関連する問題