2011-07-19 45 views
1

在Ruby on Rails中,如何訪問循環內的迭代計數器?如何訪問迭代計數器?

以下工作,但使用child_number變量是一個黑客。有沒有更好的方法來實現這一點?

<% 5.times { @parent.child.build } %> 

<%= form_for @parent do |parent_form| %> 
    <p> 
    <%= parent_form.label :full_name, "Parent's name" %> 
    <%= parent_form.text_field :full_name %> 
    </p> 

    <%= parent_form.fields_for :children do |child_form| %> 
    <% @child_number ||= 1 %> 
    <p> 
     <%= child_form.label :full_name, "Child #{@child_number}'s name" %> 
     <%= child_form.text_field :full_name %> 
    </p> 
    <% @child_number += 1 %> 
    <% end %> 

    <p> 
    <%= parent_form.submit %> 
    </p> 
<% end %> 
+0

你的問題有點含糊。我相信你有興趣訪問parent_form.fields_for loopp中的迭代計數器,但這並不是立即可見的。 – diedthreetimes

+0

是的,這正是我想要做的。 – gjb

回答

6

那麼,它會在Rails的3.2 - https://github.com/rails/rails/pull/1189

...我將它分配給3.2里程碑...

它會看起來像https://github.com/jmbejar/rails/commit/7c562d5e460d97b18e4f3367b3cfb13401732920

現在你可以使用類似的東西:

<% 5.times { @parent.child.build } %> 

<%= form_for @parent do |parent_form| %> 
    ... 
    <%= parent_form.fields_for :children do |child_form| %> 
    <p> 
     <%= child_form.label :full_name, "Child #{child_form.object_name.gsub(/[^0-9]+/,'')}'s name" %> 
     <%= child_form.text_field :full_name %> 
    </p> 
    <% end %> 
    ... 
<% end %> 
-1

這只是指數的關聯:

<% 5.times do {@parent.children.build } %> 
#should be in your controller 

    <%= form_for @parent do |parent_form| %> 
     <%= parent_form.fields_for :children do |child_form| %> 
      This will return the index 
      <%= parent_form.object.children.index(child_form.object) %> 
     <% end %> 
    <% end %> 

確保我得到了協會的權利,但邏輯是好的。

+0

你能讀這個問題嗎?謝謝。 –

+0

雖然你可以指出其餘的遺憾。 – s84

+0

-1這將創建5個表單。每個孩子越來越多。附:納什不是OP – diedthreetimes

-1

使用可枚舉each_with_index

 ().each_with_index do |elem,i| 
     end