0

これが簡単な質問であることを願っています-次のヘルパーコードがあります:

module ApplicationHelper

  def add_feature_fields(feature_types, object_form_builder, actions_visible)
    feature_types.length.times {object_form_builder.object.features.build}
    i = 0
    fields = object_form_builder.fields_for :features do |features_builder|
      render :partial => "features/fixed_feature", :locals => {:feature => features_builder, :fixed_feature_type => feature_types[i], :form_actions_visible => actions_visible}
      i = i + 1
    end
  end
end

行を除いて、コードは期待どおりに機能していますi = i + 1。何らかの理由で、これはループを壊しているようで、何もレンダリングされません。明らかに、私はこれをどういうわけか間違っています-おそらくfields_forは通常のループではありませんか?

ループが実行されるたびにiを1ずつインクリメントするにはどうすればよいですか?

4

2 に答える 2

0

以下のコードについてはよくわかりませんが、これに関する何かが機能して問題を解決するはずです。試してみる

object_form_builder.each.with_index do |builder,index|
  object_form_builder.fields_for :features, builder do |feature_builder|
      render :partial => "features/fixed_feature", :locals => {:feature => features_builder, :fixed_feature_type => feature_types[i], :form_actions_visible => actions_visible}
  end
end
于 2012-08-23T09:12:04.973 に答える
0

次のようにして、これを機能させることができました。


module ApplicationHelper

  def add_feature_fields(feature_types, object_form_builder, actions_visible)
    feature_types.length.times {object_form_builder.object.features.build}
    i = -1
    object_form_builder.fields_for :features do |features_builder|
      i = i + 1
      render :partial => "features/fixed_feature", :locals => {:feature => features_builder, :fixed_feature_type => feature_types[i], :form_actions_visible => actions_visible}
    end
  end
end

i = i + 1render を呼び出した後に行ったとき、戻り値は render ではなく iterator であったことが起こっていたと思います (メソッドが最後の値を返すため)。

于 2012-08-23T10:12:36.900 に答える