2016-01-13 45 views
1

我在我的Rails应用中有联系表单。如果表单未成功提交,我希望表单显示用户以前输入的内容。我猜想我应该使用会话先包含所有旧输入,不知道我是否正确。Rails:在提交失败后显示以前输入的联系表格

接下来的问题是,如何在页面刷新后让旧的输入显示在联系表单上?

这是我在我的控制文件中的代码:

def createMessage 
    @message = Message.new(message_params) 

    if @message.valid? 
    MessageMailer.new_message(@message).deliver 
    flash[:success] = "Thank you." 
    redirect_to root_path 
    else 
    session[:message_error] = @message 
    flash[:danger] = "An error occurred while delivering this message." 
    redirect_to root_path 
    @message = session[:message_error] 
    end 
end 

这是我的形式布局:

<%= form_for @message, url: root_path do |message_form| %> 
    <div class="form-inline"> 
    <%= message_form.text_field :first_name, :class => 'form-control', placeholder: "First Name*" %> 
    <%= message_form.text_field :last_name, :class => 'form-control', placeholder: "Last Name*" %> 
    </div> 

    <div class="form-inline"> 
    <%= message_form.text_field :business_title, :class => 'form-control', placeholder: "Business Title" %> 
    <%= message_form.text_field :business_name, :class => 'form-control', placeholder: "Business Name" %> 
    </div>  

    <div class="form-inline"> 
    <%= message_form.text_field :phone, :class => 'form-control', placeholder: "Phone*" %> 
    <%= message_form.email_field :email, :class => 'form-control', placeholder: "Email*"%> 
    </div>  

    <div class="form-group"> 
    <%= message_form.text_field :street_address, :class => 'form-control', placeholder: "Street Address*" %> 
    </div> 

    <div class="form-group"> 
    <div class="input-group"> 
     <div class="input-group-addon">Singapore</div> 
     <%= message_form.text_field :postal_code, :class => 'form-control', placeholder: "Postal Code*" %> 
    </div> 
    </div>        

    <div class="form-group">  
    <%= message_form.text_area :content, :class => 'form-control', placeholder: "Additional information"%> 
    </div> 

    <div class="form-group"> 
    <%= message_form.submit "submit", :class => 'btn btn-default' %> 
    </div>  

预先感谢您。

回答

3

的的form_for助手不正是你想要什么,如果它的正确使用

在你new方法,你能创建一个全新的空消息...

def new 
    @message = Message.new 
end 

因此,“新”视图显示时,所有的字段都准备好新的输入

在你创建方法

def create 

    @message = Message.new(message_params) 

    if @message.valid? 
    MessageMailer.new_message(@message).deliver 
    flash[:success] = "Thank you." 
    redirect_to root_path 
    else 
    flash.now[:danger] = "An error occurred while delivering this message." 
    render :new 
    end 
end 

请注意,我们正在使用包含输入值的@message对象执行render :new,因此会自动显示这些值。

编辑 - 注意提示信息通常只在redirect_to显示...有你需要使用flash.now...

0

首先,当你不能提交render闪光灯消息显示,@message变量是零所以赋值变量没用。

其次,当你redirect_to时,你不能分配@message变量。

我不确定,但我认为你不能使用@message变量,相反,你可以保存message_params到会话,然后你可以在视图中处理它。