2

为什么 Rails flash[: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 => ""在一种情况下有效,而在另一种情况下无效?

我意识到我没有给你太多的背景信息,但我的感觉是我的问题实际上很简单。

ps 这似乎类似于这个问题

4

1 回答 1

4

根据文档,redirect_to 方法采用两个参数

第二个参数是放置:notice密钥的位置。

但是,在您的案例 2 中,ruby 无法判断是否涉及一个或多个哈希。只有一个哈希被认为是传递给 redirect_to 方法。

您可以通过在每个散列周围显式设置括号来强制 ruby​​ 传递第二个散列:

format.html { redirect_to({:action => "show_matches", :id => @trial.id}, {:notice => "Candidate was successfully registered."}) }

案例 3 有效,因为这里没有不明确的哈希情况。

于 2013-02-01T00:28:28.677 回答