我的rails应用程序中有一个联系表单。如果表单未成功提交,我希望表单显示用户先前输入的输入。我猜我应该首先使用session来包含所有旧输入,但不确定我是否正确。
接下来的问题是,在页面刷新后,如何在联系表单上显示旧输入?
这是我的控制器文件中的代码:
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>
提前谢谢。
答案 0 :(得分: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
,因此会自动显示这些值。
编辑 - 请注意,Flash消息通常仅显示在redirect_to
...以显示render
上需要使用flash.now...
的快照消息
答案 1 :(得分:0)
首先,当你无法提交时,@ message变量为nil所以赋值变量是没用的。
其次,当你redirect_to时,你不能分配@message变量。
我不确定,但我认为您不能使用@message变量,相反,您可以将message_params保存到会话中,然后您可以在视图中处理它。