2012-04-30 13 views
0

私は自分が二重ループだと思っているものと混乱していて、それを修正する方法は知らない。誰も私を完全に怒ってから救うことができますか?奇妙なループ動作 - ここで何が起こっていますか?

これは私のショービューで動作します。次に

<%= form_for @release do |f| %> 
    <%= f.fields_for :tracks do |builder| %> 
    <%= render 'track_fields', :f => builder %> 
    <% end %> 
    <%= link_to_add_fields "Add track", f, :tracks %> 

フィールド自体を:私は使用してカスタムアクションとビューの複数のトラックのためのフォームをレンダリングしようとしている

<% @releases_tracks_temp.each do |releases_track| %> 
    <tr> 
    <td><%= releases_track.track.id %>/<%= releases_track.position %></td> 
    <td><%= releases_track.track.name %> 
     <%= releases_track.track.artists.map { |a| a.name}.join (", ") %></td> 
    <td><%= releases_track.track.isrc %></td> 
    <td><%#= link_to image_tag("icons/delete.png"), releases_track, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 

<% @releases_tracks_temp.each do |releases_track| %> 
    <%= f.text_field :name, :class => "text" %> 
    <%= f.text_field :artist_tokens, "data-pre" => releases_track.track.artists.map(&:attributes).to_json, :class => "track_artist_tokens" %> 
    <%= f.text_field :version, :class => "text" %> 
    <%= f.text_field :isrc, :class => "text" %> 
    <%= f.select(:asset_tier, options_for_select([['Front', 'Front'], ['Mid', 'Mid'], ['Back', 'Back']]), {}, :class => "tier-select") %> 
    <%= f.text_field :preview_start, :class => "text small" %> 
    <%= f.check_box :parental_advisory %> 
    <%= f.check_box :available_separately, {:checked => true} %> 
    <%= f.check_box :_destroy %> 
<% end %> 

多くのトラックがループしてしまいますが、たとえば5 tra cksは5回表示されます!だから25結果。

releases_track.track.artists.map(&:attributes) 

任意のアイデア:経由して各トラックのアーティスト私は、二重ループを参照してくださいと思いますが、私はこの問題を解決し、まだ(複数)へのアクセス権を持っているかどうかはわかりませんか?

ああ、@releases_tracks_tempは次のように私のリリースコントローラに定義されています

@releases_tracks_temp = @release.releases_tracks.find(:all, :order => "position") 

リリースの下にネストとしてトラックが受け入れられています。

ありがとうございます!!!

答えて

1

リリースごとに、トラックごとにリストを印刷します。トラック上でループする必要はありません二回

一つの形態の代わりに、2

<%= form_for @release do |f| %> 
    <%#= f.fields_for :tracks do |builder| %> 
    <%= render 'track_fields', :f => f %> 
    <%# end %> 
<% end %> 

編集持っている - このよう

<%= form_for([@release, @release.tracks.build]) do |f| %> 
    <%= f.text_field :name, :class => "text" %> 
    <%= f.text_field :artist_tokens, "data-pre" => releases_track.track.artists.map(&:attributes).to_json, :class => "track_artist_tokens" %> 
    <%= f.text_field :version, :class => "text" %> 
    <%= f.text_field :isrc, :class => "text" %> 
    <%= f.select(:asset_tier, options_for_select([['Front', 'Front'], ['Mid', 'Mid'], ['Back', 'Back']]), {}, :class => "tier-select") %> 
    <%= f.text_field :preview_start, :class => "text small" %> 
    <%= f.check_box :parental_advisory %> 
    <%= f.check_box :available_separately, {:checked => true} %> 
    <%= f.check_box :_destroy %> 

    <%= link_to_add_fields "Add track", f, :tracks %> 
<% end %> 
+0

ああ、それを試してみてくださいし、私はあなたがここで取得しているかを見るが、私ドンそれはそうだと思う。それは、私がトラックのアーティストを引っ込めるためにループを購入したときに悪い動作を開始したときでした:@ releases_tracks_temp.each do | releases_track | 。私は上記のあなたの提案を試してみましたが、それは 'ビルダー'を探しています – Raoot

+0

これはビルダーの代わりにfだったはずです。私はそれをすぐに試してみるでしょう。 –

+0

@ D3mon - 助けてくれてありがとうございますが、これは1つのフォーム/トラックしか作成しません。私はかなり問題が@ releases_tracks_temp.each do | releases_track |にあると確信しています。それを取り除くと、トラックの数から各トラックのアーティスト数を差し引いた数が得られます。 – Raoot

関連する問題