0

ネストされたフォーム全体を把握しようとしていますが、フォームを編集用にレンダリングする際に問題が発生しています。

実際には何も保存しないので、新しいアクションと作成アクションを使用してこれを「典型的な方法」で行っているわけではありません。このフォームを使用して、いくつかのテストを生成しています。

これが私が持っているものです..

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 }」が行うはずの列を表示していないことです。また、フォームを送信するときに、追加されたネストされたすべての属性が削除される理由を突き止める必要があります。したがって、フォームを送信するたびに、フォームが再度レンダリングされ、すべての属性が失われます。(「モデル」属性は引き続き存在しますが、「列」属性は毎回リセットされます)

私が間違っていることについてのアイデアはありますか?

ありがとう

4

1 に答える 1

2

これを認めるのも恥ずかしいですが、他の誰かが同じ問題を抱えているかどうかを確認するのに役立つことを願っています.

<% f.fields_for :columns do |builder| %>

に変更:

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

うん..私がそんなことをしたなんて信じられない.

于 2013-01-30T17:50:49.020 に答える