我试图在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.
请注意,在上面的示例中,将呈现的所有内容都是消息文本。
请您指点我在控制器或我的视野中需要更改的内容,以达到上述所需的输出?
提前谢谢。
答案 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
字符串。