为什么Rails闪存[:notice] =“msg”的工作地点:notice => “msg”不是吗?

时间:2013-02-01 00:21:55

标签: ruby-on-rails

为什么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类似。

1 个答案:

答案 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有效,因为此处没有模糊的哈希情况。