2011-12-30 8 views
0

[OK]を位置番号を持つ最初のアイテムを見つけたので、私はよく分からないどのように単語にこのしかし:オブジェクトの配列をループして

私はアルバムの配列を持ち、かつ各アルバムは、多くの画像を持っています。私はルビーの宝石acts_as_listを使って、ユーザーがアルバム内の画像を並べ替えることができるようにしているので、それぞれの画像には位置があります。ソートを行う方法は、アルバム画像と非アルバム画像の間で設定することです。すべてのアルバムに1の位置の画像があるわけではありません。

私がやりたいことは、すべてのアルバムを一覧表示し、そのアルバムの最も早い位置にある画像のみを表示することです。しかし、最初の位置を見つけるための位置に関する方法はありません。

<% @albums.each do |i| %> 
    <li class="box sortable_object" style="float:left; margin: 0.5em;" id="album_<%= i.id %>"> 
    <span class="handle">[drag me!]</span> 
    <% unless i.tattoos.empty? %> 
    <%= image_tag i.tattoos.first.file.url(:small) %><br /> 
    <% end %> 
    </li> 
<% end %> 

しかし、それは単にイメージテーブル内の位置ではなく、その位置番号に基づいて、アルバムの最初の画像を検索します。ここでは

は、私が今持っているものです。関連付けを宣言するときは、order句を指定することができます

+0

アルバムのリストが1から始まっていないアルバムはありますか?これは、要素が手作業で操作された場合にのみ発生します。以前は、同期から外れたリストの番号を変更するために、 "re-order"メソッド(acts_as_listにパッチを適用)を使用しました。 – Pavling

答えて

2

class Album < ActiveRecord::Base 
    has_many :tattoos, order: 'tattoos.position ASC' 
end 

この方法は、最初の写真は遠かった最も低い位置とのいずれかになります。

+0

これはあなたの 'Tattoo'クラスでこれを行うこともできます:' default_scope order(arel_table [:position] .asc) ' –

+0

素晴らしいことに、私はアソシエーションに対してデフォルトの注文を設定することができないのを忘れていました。 – rugbert

+1

私はちょうどあなたの入れ墨サイトを訪れ、隠された「f ** k IE」メッセージについて完全にrotfl'dしました。 –

関連する問題