如何使用先前输入的数据预先填充错误输入

时间:2011-05-13 18:28:16

标签: ruby-on-rails forms

我正在制作一个自定义的AJAX表单。

如果用户填写了表格的一半,则无法完成另一半表格。

由于某些奇怪的原因,表格不会预先填充至少他们已经输入的内容。

因为它没有这样做,我怎么能手动告诉它呢?当表单返回时,它验证的对象仍然可以访问,因此我可以从中提取信息。

表格的样本

- form_for CardSignup.new do |f|
  - unless @card_signup.nil?
    -  if !@card_signup.errors.empty?
      .prefix_1.grid_4
        - @card_signup.errors.full_messages.each do |error|
          .warning
            = error
          %br/
  .grid_2.prefix_1{:style => "width: 166px;"}
    = f.text_field :first_name, :style => "width: 166px;", :value => "first name", :rel => "first name"
    %div{:class => 'error_message'}

我的创建方法

def create
  if params[:user] && current_user.admin
    @card_signup = User.find(params[:user]).build_card_signup(params[:card_signup])
  else
    @card_signup = current_user.build_card_signup(params[:card_signup])
  end
  if @card_signup.valid?
    respond_to do |wants|
      #wants.html { redirect_to disclaimer_card_signup_path, :locals => { :card_signup => @card_signup } }
      wants.json { render :json => { :html => (render_to_string :partial => 'disclaimer') } } 
    end
  else
    respond_to do |wants|
      #wants.html { redirect_to new_card_signup_path }
      wants.json { render :json => {:errors => @card_signup.errors, :html => (render_to_string :partial => '/card_signups/new_form') } }
    end
  end
end

1 个答案:

答案 0 :(得分:1)

你这样做:

form_for CardSignup.new

每次渲染表单时都会实例化一个新的CardSignup对象。将其移至新操作,然后在创建操作中执行此操作:

@card_signup = CardSignup.new(params[:card_signup])

这会将半满的对象传递回表单,您将获得已经填充的字段。