为什么Rails闪存[:notice] =“msg”的工作地点:notice => “msg”不是吗?如果我使用以下代码,则会显示通知:
# Case 1 (this works)
flash[:notice] = 'Candidate was successfully registered.'
format.html { redirect_to :action => "show_matches", :id => @trial.id }
这不起作用:
# Case 2 (this doesn't)
format.html { redirect_to :action => "show_matches", :id => @trial.id, :notice => "Candidate was successfully registered."}
但在我申请的其他方面,上述技术运作得很好:
# Case 3 (this works)
format.html { redirect_to @candidate, :notice => 'Candidate was successfully created.' }
我的布局包括:
<section id="middle_content">
<% flash.each do |key, value| -%>
<div id="info_messages" class="flash <%= key %>"><%= value %></div>
<br/>
<% end -%>
<%= yield -%>
</section>
所以我的问题是为什么在一个案例中使用:notice => ""
而在另一个案例中却没有?
我意识到我没有给你太多的背景,但我的感觉是我的问题实际上非常简单。
P.S。这似乎与this question类似。
答案 0 :(得分:4)
redirect_to方法接受两个参数according to the documentation
第二个参数是放置:notice
键的位置。
然而,在你的案例2中,ruby无法判断是否涉及一个或多个哈希值。只有一个哈希被认为是传递给redirect_to方法。
您可以通过在每个哈希周围显式设置括号来强制ruby传递第二个哈希:
format.html { redirect_to({:action => "show_matches", :id => @trial.id}, {:notice => "Candidate was successfully registered."}) }
案例3有效,因为此处没有模糊的哈希情况。