【问题标题】:Nested form losing data嵌套表单丢失数据
【发布时间】:2023-04-05 01:43:01
【问题描述】:

遗憾的是,在验证用户输入的数据失败后,我的表单丢失了。我该如何更改此设置,以使表单不会丢失数据?

查看_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

感谢您的帮助!

【问题讨论】:

  • 您是否在 UserController#create 操作中使用了@user = User.new(params[:user])?请发布您的控制器代码。

标签: ruby-on-rails-3 forms fields-for


【解决方案1】:

解决方案是像下面的代码一样设置一个实例变量作为值。

<%= f.fields_for :table1 do |ff| %>
  <%= ff.hidden_field :name, :value => @value %>
<% end %>

【讨论】:

    【解决方案2】:

    使用:&lt;%= f.fields_for @table1 do |ff| %&gt;

    确保在控制器中设置@table1,并使用从表单提交中接收到的数据。

    【讨论】:

      【解决方案3】:

      更好用

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

      您不必设置值,即&lt;% ff.text_field :name, value: 'something' %&gt;

      【讨论】:

        猜你喜欢
        • 2016-04-19
        • 2014-02-15
        • 2015-03-07
        • 1970-01-01
        • 2020-05-25
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 2013-10-24
        相关资源
        最近更新 更多