2014-11-20 104 views
0

我试图在正确提交表单时呈现错误。所以我的形式打它失败在rails中呈现错误消息

指数从控制器,

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

什么是完整的错误信息? – 2014-11-20 22:45:50

+0

我对此很陌生,尚未初始化它。我的动机是让索引页正常工作,然后担心这些消息。这是我应该做的事吗? – Trancey 2014-11-20 22:48:25

+0

你不想更新很多播放器对象吗?那么使用一种形式来做到这一点可能是错误的做法。你最终的目标是什么? – rorofromfrance 2014-11-20 22:51:28

回答

1

错在这里有许多东西:

1)你需要一个ActiveRecord类的实例有错误方法。

从你的控制器代码上面我假设你有一个索引方法的实例数组(has_many关系)squad.player_typeserrors方法只能在对象本身(不在关系上)调用,因为一般情况下,每个对象可能有不同的数据,这些数据可能有不同的错误。

2)如果你没有调用#save,#update或#valid,errors方法是一个空数组?在你的实例之前

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

3)你只能验证你的数据,然后再实际发送你的JavaScript客户端验证。

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


Finnaly我想用表单库像simple_formformtastic,这已经能够在一个很好的方式来显示错误消息,有很多使用的例子,你可以在网上找到对他们俩的推荐。