ネストされたフォーム全体を把握しようとしていますが、フォームを編集用にレンダリングする際に問題が発生しています。
実際には何も保存しないので、新しいアクションと作成アクションを使用してこれを「典型的な方法」で行っているわけではありません。このフォームを使用して、いくつかのテストを生成しています。
これが私が持っているものです..
model.rb
class Model < ActiveRecord::Base
has_many :columns
has_many :associations
accepts_nested_attributes_for :associations, :reject_if => lambda { |a| a[:type].blank? }
accepts_nested_attributes_for :columns, :reject_if => lambda { |a| a[:name].blank? }
attr_accessible :name, :associations_attributes, :columns_attributes
end
column.rb
class Column < ActiveRecord::Base
belongs_to :model
attr_accessible :db_index, :mass_assign, :max_length, :min_length, :name, :required, :unique, :columns_attributes
validates :name, :presence => true
end
generator_controller.rb
def model
if params['submit']
@model = Model.new(params[:model])
@model.columns.build
else
@model = Model.new
3.times { @model.columns.build }
end
render 'generator/model'
end
フォーム ビュー
<%= nested_form_for(@model, :url => '/model', :html => {:style => 'width:100%;'}) do |f| %>
<%= flash_helper() %>
<h3>Model Name</h3>
<%= f.text_field :name %>
<h3>Add Table Columns</h3>
<div id="columns">
<% f.fields_for :columns do |builder| %>
<div class="float_left column">
<%= builder.label :name %>
<br>
<%= builder.text_field :name, :size => 20 %>
</div>
<div class="float_left column">
<%= builder.label :mass_assign %>
<br>
<%= builder.check_box :mass_assign %>
</div>
<div class="float_left column">
<%= builder.label :required %>
<br>
<%= builder.check_box :required %>
</div>
<div class="float_left column">
<%= builder.label :unique %>
<br>
<%= builder.check_box :unique %>
</div>
<div class="float_left column">
<%= builder.label :db_index %>
<br>
<%= builder.check_box :db_index %>
</div>
<div class="float_left column">
<br>
<%= image_tag "delete-icon24x24.png", :class => "btnDel clickable" %>
</div>
<br class="clear_float">
<% end %>
<%= f.link_to_add image_tag('add-icon.png'), :columns %>
</div>
<br><br>
<input type="submit" name="submit">
<p>
<%= @results %>
</p>
<% end %>
問題は、新しいフォームが「3.times { @model.columns.build }」が行うはずの列を表示していないことです。また、フォームを送信するときに、追加されたネストされたすべての属性が削除される理由を突き止める必要があります。したがって、フォームを送信するたびに、フォームが再度レンダリングされ、すべての属性が失われます。(「モデル」属性は引き続き存在しますが、「列」属性は毎回リセットされます)
私が間違っていることについてのアイデアはありますか?
ありがとう