以下是我的消息控制器的操作:
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if @message.valid?
Contactform.contact(@message.name, @message.town, @message.email, @message.content).deliver
redirect_to 'messages#new', flash: { success: "Sent Message" }
else
redirect_to 'messages#new', flash: { alert: "Message Error" }
end
end
这就是我想要发生的事情:
我去了新的'路由,创建一个@message实例,并在' new'查看有一个表单,我们可以更新此消息'实例'属性。
现在,我正在按照教程进行操作,但似乎有些解决方法。当我们提交'表格,我们会自动被带到“创造”状态。动作,并创建第二个消息实例并使用旧实例属性填充。
如果属性通过消息模型的验证,则属性将传递到' Contactform'邮件的联系人'动作,传递信息。然后我们被重定向到新的'查看,并使用"已发送消息"填充闪存。字符串,我们可以看到当我们到达新的'视图。
如果属性未通过消息模型的验证,我们将被重定向到新的'查看,并使用"消息错误"填充闪存。字符串,我们可以看到当我们到达新的'视图。
实际发生的事情
除了闪光灯外,一切都很完美。一旦它成功填充了'成功'或者警告'消息,它不会改变,直到我浏览到另一个页面。然后它会在新页面上获取更新的消息,所以我认为因为我回到同一个位置,因为某些原因闪存没有更新。
尽管我们回到同一页面,我怎样才能使闪光灯正常工作?
更新
再说一次,如果我被重定向到另一个页面,它会完美运行。只是因为它是同一页面,闪存不会更新。
此外,我现在认为:仍然没有做任何事情。
<% if !flash.empty? %>
<% flash.each do |index, value| %>
<div class = "alert alert-<%= index %>"> <%= value %></div>
<% end %>
<% flash[:error] = flash[:message] = flash[:notice] = nil %>
<% end %>
答案 0 :(得分:0)
如果您希望Flash在同一请求中显示(即没有重定向),则需要使用flash.now。以下是rails docs中的解释:
默认情况下,向Flash添加值将使它们可用于下一个请求,但有时您可能希望在同一请求中访问这些值。例如,如果创建操作无法保存资源并且您直接呈现新模板,那么这不会产生新请求,但您可能仍希望使用闪存显示消息
见第5.2.1节http://guides.rubyonrails.org/action_controller_overview.html