在rails中呈现错误消息

时间:2014-11-20 22:41:31

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

我正在尝试在正确提交表单时呈现错误。所以我的表单从控制器点击索引,

  def index
    @player_types = squad.player_types
  end

然后在索引视图中,

<%= form_tag({:action => :update}, :method => :put) do %>
 <%= render 'shared/error_messages' %>
<table>
        <% @player_types.order(:number).each do |p_type| %>
             ...do something...
<%end%>
<%end%>

在错误消息中,我有一个简单的错误检查(现在)失败

<% if @player_types.errors.any? %>

因为undefined method 'errors'

在大多数在线示例中,使用new实例化对象时会给出错误方法。但是在我的情况下,对象最初具有要显示的内容。我在这里做错了,我是否应该使用@player_types来捕获错误?

编辑:正如评论中所建议的那样,我已经在错误消息中循环了

<% @player_types.each do |p_type| %>
    <% if @p_type.errors.any? %>
    <%end%>
<%end%>

1 个答案:

答案 0 :(得分:1)

这里有很多错误:

1)您需要ActiveRecord类的实例才能使用errors方法。

从上面的控制器代码中我假设你有一个带有实例数组的索引方法(has_many relation)squad.player_typeserrors方法只能在对象本身上调用(而不是在关系上),因为通常每个对象都有不同的数据可能有不同的错误。

2)如果不调用#save,#update或#valid,则error方法为空数组?在

之前的实例上

对于实际包含任何错误的errors方法,您必须先调用一些运行验证的方法。当您使用'put'作为表单方法时,我假设您要更新某些内容,因此通常会通过RESTful approach中的更新方法来完成。如果你不关心你也可以在你的索引方法中做到这一点。我不清楚你想要做什么,所以我不能给你一个代码示例

3)您只能在实际发送javascript客户端验证之前验证您的数据。

正如我在2)中已经提到的那样,您需要在某些时候验证您的数据。这涉及从表单中获取一些数据到模型实例中,然后调用运行模型验证的方法。在发送表单之前验证表单的唯一选择是使用客户端HTML5或javascript验证。但要小心,客户端验证只是帮助用户的工具,并不足以强制您的数据正确。


Finnaly我想建议使用像simple_formformtastic这样的表单库,它们已经能够很好地显示错误消息了,你可以在网上找到很多用法示例。它们。