Вложенная форма теряет данные - PullRequest
1 голос
/ 17 августа 2011

К сожалению, теряет мою форму после неудачной проверки данных, которые набрал пользователь. Как я могу изменить это, чтобы форма не теряла данные?

Просмотр _form.html.erb:

<%= form_for(@user, :html => {:name => "newUser""}) do |f| %>
  <div class="field_left">
    <%= f.label :last_name, "Last name<span>*</span>".html_safe %><br />
    <%= f.text_field :last_name %>
  </div>
<% end %>

<div class="field">
  <%= f.fields_for :table1 do |ff| %>
    <%= ff.text_field :name %>
  <% end %>
</div>

Контроллер users_controller:

def new
  @user = User.new 
  1.times {@user.table1.build}

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @user }
  end
end

def create
  @user = User.new(params[:user])
  @table1= params[:user][:table1][:name]

  respond_to do |format|
    if @user.save
      format.html { redirect_to(@user, :notice => 'User was successfully created.') }
      format.xml  { render :xml => @user, :status => :created, :location => @user }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
    end
  end
end

Спасибо за вашу помощь!

Ответы [ 3 ]

1 голос
/ 23 августа 2011

Решение состоит в том, чтобы установить переменную экземпляра в качестве значения, как показано в следующем коде.

<%= f.fields_for :table1 do |ff| %>
  <%= ff.hidden_field :name, :value => @value %>
<% end %>
0 голосов
/ 12 июня 2013

Лучше всего использовать

<%= f.fields_for :table1, f.object.table1 do |ff| %>
  <% ff.text_field :name %>
<% end %>

Вам не нужно устанавливать значения, т.е. <% ff.text_field :name, value: 'something' %>.

0 голосов
/ 17 августа 2011

Использование: <%= f.fields_for @table1 do |ff| %>

Убедитесь, что в контроллере установлено значение @table1 с данными, полученными из отправки формы.

...