2

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

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

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

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

执行此操作后,我的错误将绑定到 flash 范围,但是当我在视图上输出它们时,它们显示如下:

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

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

 Your key needs to be different.
 Another exception.

请注意,在上面的示例中,将呈现的只是消息文本。

请您指出我需要在控制器或视图中进行哪些更改以实现上述所需输出的正确方向吗?

先感谢您。

4

2 回答 2

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 %>

在屏幕上返回:

您的密钥需要不同。
另一个例外。

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

于 2013-07-27T02:02:08.287 回答
0

我立即看到的一个需要改进的地方是你传递的哈希。

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

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

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

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

于 2013-07-27T02:39:41.330 回答