0

DogモデルとDogに属するSpecieモデルがあります。Dog を作成するとき、Rails はネストされたフォームも生成して、「種を追加」ボタンを使用して種を追加します。問題は、ネストされたフォームを追加した後のビューが親フォームの前に発生することです。ネストされたフォームをさらに追加すると、親フォームが最後のフォームになります。確かに良くない。

class Dog < ActiveRecord::Base
  attr_accessible :name, :species_attributes
  has_many :species
  accepts_nested_attributes_for :species
  validates :name, :presence => true
end

class Specie < ActiveRecord::Base
  attr_accessible :name, :specie_id
  belongs_to :dog
  validates :name, :presence => true
end

<

div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
    <%= f.fields_for :species do |builder| %>
        <%= render 'specie_fields', :f=> builder %>
    <% end %>
    <%= button_to_add_fields 'Add Specie', f, :species %>
  <div class="actions">
    <%= f.submit %>
  </div>
  <% end %>

_specie_fields.html.erb:

<div class="field">
<%= f.label :name, 'Specie' %> <br />
<%= f.text_field :name %>
<%= f.hidden_field :_destroy %>
<%= button_to_function 'Specie delete', 'remove_fields(this)' %>
</div>

ヘルパー メソッド:

module ApplicationHelper
  def button_to_add_fields(name, f, association)
    new_object = f.object.class.reflect_on_association(association).klass.new
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
      render(association.to_s.singularize + "_fields", :f => builder)
    end
    button_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
  end
end

JS ファイル:

 function add_fields(link, association, content) {
        var new_id = new Date().getTime();
        var regexp = new RegExp("new_" + association, "g")
        $(link).parent().before(content.replace(regexp, new_id));
4

2 に答える 2

0

JS関数「add_fields」を確認する必要があります。

この関数は、ネストされたフォームを間違った場所に追加します。

于 2013-02-28T14:18:23.903 に答える
0

JS ファイルで、以下に示すように置き換えparent().beforeます。before

 $(link).before(content.replace(regexp, new_id));

このようにして、ボタンの前にパーシャルを挿入し(ヘルパーのこの行から$(link)です:)、親の前ではありません(これは、おそらくフォーム全体の親です)。thisbutton_to_function(name, "add_fields(this, ...<%= button_to_add_fields 'Add Specie', f, :species %>

于 2013-02-28T18:05:32.640 に答える