Rails显示模型中的Flash消息

时间:2013-07-27 00:28:04

标签: ruby-on-rails-3

我试图在Rails中显示我的模型中的一些错误消息。目前,当我的test模型中捕获到异常并引发异常时,将在我的对象的错误范围内按预期返回消息。消息返回如下:

 {:key1=>["Your key needs to be different."], 
 :key2=>["Another exception"]}

这是完美的,因为正确的错误会引发正确的异常。我现在要做的是将这些消息绑定到闪存范围,以便我可以在我的视图中显示它们。在我的控制器中,当我有异常时,然后将其绑定到flash[:error]范围,如下所示:

 flash[:error] = @test.errors.messages
 render :new

执行此操作时,我的错误被绑定到闪存范围,但是当我在视图中输出它们时,它们显示如下:

 [:error, {:key1=>["Your key needs to be different."], :key2=>["Another exception"]}]

我想做的就是显示这些消息中的每一条,以便它们看起来像:

 Your key needs to be different.
 Another exception.

请注意,在上面的示例中,将呈现的所有内容都是消息文本。

请您指点我在控制器或我的视野中需要更改的内容,以达到上述所需的输出?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我注意到当我在以下构造中循环@test.errors.messages时,我最终得到了一个二维数组:

[:key1, ["Your key needs to be different."]] 
[:key2, ["Another exception"]]

由于这是一个多维数组,我可以简单地在我的erb中遍历数组并获取值,以便在我的问题中显示:

<% for i in flash[:error] %>
    <%= i[1].first %><br />
<% end %>

屏幕上的返回:

  

你的钥匙需要与众不同   另一个例外。

我总是乐于接受建议,所以如果有更好的方法来解决这个问题,那么请指教!否则,这对我有用。

答案 1 :(得分:0)

我立刻想要改进的地方就是你要经过的哈希。

如果没有特定原因要将字符串包装在数组中,则可以删除数组:

{ 
  :key1 => "Somebody poisoned the watering hole!",   
  :key2 => "There's a snake in my boot."
}

这将简化你的代码并消除你似乎不打算创建的二维数组。

如果有理由将字符串包装在一个数组中(每个键有多个消息?),则需要重新访问迭代器;现在它的编写方式,它只会显示任何给定键的first字符串。