传递错误的正确方法

时间:2014-02-07 00:11:54

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我的项目视图中有一个表单

我在做

redirect_to root_path(@locale), alert: @client.errors

并在我的视图中使用

进行迭代
flash[:alert].full_messages.each

但是当有很多错误时,rails会启动错误

ActionDispatch::Cookies::CookieOverflow

在RoR中传递大量错误描述的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

通常情况下,警报是一个设定长度的字符串 - 而不是可以长得这么长的字符串。

render :new, alert: "There has been an error"

渲染时,您可以在实例对象中查找错误 - 在本例中为@ client.errors。

轨道方式在视图中是这样的......

<% if @client.errors %>
  <ul>
    <% @client.errors.full_messages.each do |m| %>
      <li><%= m %></li>
    <% end %>
  </ul>
<% end %>

原谅我的错误 - 我一直在写haml太久了。

要取消这一点的主要方法是渲染而不是重定向。通常,呈现的页面与具有该表单的页面相同。因此,在create方法中,您将在出错时呈现新内容。在update方法中,您呈现编辑。

答案 1 :(得分:0)

就个人而言,我认为传递错误的最正确方法是仅在通过验证时使用redirect_to,如果不通过则使用render(对值的简单测试) @object.update_attributes(hash))。

这样,您可以直接从视图中访问对象错误(通过@object.errors),而无需在用户Cookie中加载任何内容。