奇怪的循环行为 - 这里发生了什么? [英] Weird looping behaviour - what's happening here?

查看:372
本文介绍了奇怪的循环行为 - 这里发生了什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

变得自己都糊涂了什么,我认为是一个双循环,不​​知道如何解决它。谁能救我从去完全疯了吗?

Gotten myself all confused with what I think is a double loop and don't know how to fix it. Can anyone save me from going completely mad please?

这工作在我的节目的看法:

This works in my show view:

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

我试图渲染的多首曲目的自定义操作的格式,并查看使用:

I'm trying to render a form for multiple tracks with a custom action and view using:

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

然后域就是:

Then the fields themselves:

<% @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轨迹显示的5倍!所以25结果。我想我看到一个双循环,但我不知道如何通过解决这个问题,仍然可以访问(多个)的艺术家,每个轨道:

I end up getting it looping however many tracks there are by that number, for example 5 tracks are displayed 5 times! So 25 results. I think I see a double loop but i'm not sure how to fix this and still have access to the (multiple) artists for each track via:

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

任何想法?

呵呵,@releases_tracks_temp在我的版本控制定义为:

Oh, @releases_tracks_temp is defined in my releases controller as:

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

曲目被接受为嵌套在释放。

Tracks are accepted as nested under releases.

在此先感谢!

推荐答案

对于每个版本,每个轨道的打印清单。无需要循环的轨道两次

For each release, for each track print the list. No need to loop over tracks twice

有一种形式,而不是2

Have one form instead of 2

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

编辑 - 试试这样

Edit - Try it this way

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

这篇关于奇怪的循环行为 - 这里发生了什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆