2012-04-30 64 views
0

让自己感到困惑,我认为是一个双重循环,不知道如何解决它。任何人都可以救我完全疯了吗?奇怪的循环行为 - 这里发生了什么?

此作品在我的节目的看法:

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

编辑 - 尝试这种方式

<%= 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 | 。我确实尝试了上面的建议,但它正在寻找'builder' – Raoot

+0

这应该是f而不是builder。我会尽快测试并看看。 –

+0

@ D3mon - 非常感谢您的帮助,但这只会产生一种形式/曲目。我很确定问题出现在@ releases_tracks_temp.each do | releases_track |因为当我删除它时,我会得到正确数量的曲目减去每个曲目的艺术家。 – Raoot