0

(同じ 3 つのフィールドに対して) 3 回レンダリングするパーシャルのフォームがあります。ただし、各フィールドのプレースホルダー値は異なることが理想的です。したがって、パーシャルのレンダリングごとに変更されるローカル変数を渡そうとしています。

コントローラーでは、このような配列を作成しました

@placeholder = %w[ firstplaceholder, secondplaceholder, thirdplaceholder]

次に、部分的なレンダリング中に配列をループしようとしました

    <%= f.fields_for :answers do |builder| %>

     <% @placeholder.each do |k, arrayindex| %>

        arrayindex = @placeholder.index(k)

      <%= render :partial => 'answer_fields', :locals => { :f => builder, :myplaceholder => @placeholder[arrayindex] } %>

   <% end %>

   <% end %>

arrayindex を @placeholder に渡すと、このエラーが発生します

  no implicit conversion from nil to integer

したがって、arrayindex変数は「nil」であると推測しています。なんで?

パーシャルの内部では、エラー メッセージがあり、フォーム フィールドが再入力される状況では、プレースホルダーはありません (@placeholder インスタンス変数は、エラーがない場合にのみコントローラーで作成されます)。そのため、最初に @placeholder インスタンスが変数が存在し、プレースホルダーをループで作成されたインデックスに設定しようとしましたが、配列インデックスを渡すエラーのため、機能していません。他の問題があるかもしれません:)

    <% if @placeholder ? myplaceholder = @placeholder[arrayindex] : myplaceholder = "answer choice" %>

    <%= f.text_field :content, :class => 'span3', :rows => 1, :placeholder => myplaceholder %>
    <%= f.label :correctanswer, "Correct?" %>
    <%= f.check_box :correctanswer, :class => 'span1' %>
   <% end %>

アップデート

コントローラーでは、質問モデル用に 3 つの回答フィールドを作成しています。このため、パーシャルは自動的に 3 回レンダリングされます。パーシャルをラップした @placeholder 配列をループすると、パーシャルがさらに 3 * 3 倍レンダリングされます。

3.times {@question.answers.build}
4

2 に答える 2

2

まず、ここではコンマ区切りは必要ないことに注意してください。

@placeholder = %w[ firstplaceholder secondplaceholder thirdplaceholder]

また、配列にインデックスを使用する必要はありません (あなたが何をしようとしているのか理解できれば)。したがって、次のように簡単にする必要があります。

<%= f.fields_for :answers do |builder| %>
  <% @placeholder.each do |k| %>
    <%= render :partial => 'answer_fields', :locals => { :f => builder, :myplaceholder => k } %>
  <% end %>
<% end %>
于 2013-03-02T02:20:10.457 に答える
0

コントローラーでは、プレースホルダー値の配列とともに、

@i = 0

4 つの回答を作成したため、forms_for パーシャルは 4 回レンダリングされていました。

4.times {  @question.answers.build}

したがって、パーシャルをレンダリングするたびに、@i インスタンス変数をインクリメントし、インクリメントした値を @placeholder 配列に渡し、@placeholder[@i]パーシャル内で配列の適切な要素を使用しました。

  <%= f.fields_for :kanswers do |builder| %>
  <%= render :partial => 'kanswer_fields', :locals => { :f => builder, :k => @placeholder[@i]} %>
  <% @i += 1 %> 

  <% end %>
于 2013-03-02T22:34:12.777 に答える