2012-04-30 5 views
0

Gotten себя все путают с тем, что, я думаю, двойной цикл и не знаю, как это исправить. Может ли кто-нибудь спасти меня от безумства, пожалуйста?Странное поведение цикла - что здесь происходит?

Это работает в моем шоу зрения:

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

Я пытаюсь сделать форму для нескольких треков с пользовательскими действиями и видом использования:

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

Edit - Попробуйте это так

<%= 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 - Большое спасибо за помощь, но это дает только одну форму/дорожку. Я уверен, что проблема заключается в @ release_tracks_temp.each do | releases_track | когда я удаляю это, я получаю нужное количество дорожек минус художники каждого трека. – Raoot

 Смежные вопросы

  • Нет связанных вопросов^_^