1
  def link_to_add_nested_fields(name, f, association, klasss, type) 
    new_object = f.object.send(association).klass.new
    id = new_object.object_id
    field = f.fields_for(association, new_object, child_index: id) do |builder|
      render(association.to_s.singularize + "_#{type}", f: builder)
    end
    link_to(name, '#', class: klasss, data: {id: id, type: field.gsub("\n", "")})   
  end

ここから入手したヘルパー コードをカスタマイズしようとしていますhttp://railscasts.com/episodes/196-nested-model-form-revisedですが、型パラメーターに問題があります。このヘルパーの使用例。

<%= link_to_add_nested_fields "Add custom field", f, :fields, "add_fields","fields" %>

問題は間違いなく型パラメーターにあります。これを解決する方法を知っている人はいますか? ありがとう

4

1 に答える 1

1

このキャストを見たことがありますが、これは、ネストされた属性の「さらに追加」リンクを処理するための最良の解決策ではないようです。

基本的に、accepts_nested_attributes が機能する方法がここでの鍵です。

あなたのcontroller

parent.child.build

最初のビューのために一度ビルドするだけです。これにより、ページのリロード時にフィールドが最初に表示されるようになります。

あなたの.erb template

<% parent.children.each do |child| %>
<div class="child_fields">
    <%= render "the child fields partial" %>
</div>
<% end %>
<%= link_to "Add More", "#", class: "add_more_link" %>
<% javascript_include_tag "js_file_to_handle_add_more_link" %>

あなたの"js_file_to_handle_add_more_link.js"

まず、以下を使用して既存の子フィールドを数えます。

$('.child_fields').size();

次に、id を次のように指定して html フィールドを作成します。

parent_children_attributes_" + count + "_attribute_name"

そして次のように名前を付けます:

"parent[children_attributes]["+ count +"][attribute_name]"

子フィールドの各セットには、一意の値カウントが必要です。また、ここでは親は単数形で、子は複数形です。

そして、それだけです。

フォームが送信されると、それぞれがaccepts_nested_atributesフォーマットによって一意に識別されるため、子オブジェクトが自動的に保存されます

于 2013-07-07T19:13:06.993 に答える