Rails 3.1 form_for缺少方法

时间:2011-10-27 15:38:35

标签: ruby-on-rails-3.1

我正在使用我知道正在运行的模型(记录存在于数据库中,可以搜索并在其他视图中显示等)但是当我尝试使用form_for标记生成视图时编辑其中一条记录,我收到一条错误消息:

显示第{13行引发的/var/www/caucus/app/views/registration_loader/checkIn.html.erb

undefined method `voter_path' for #<#<Class:0x98cabdc>:0x98c8878>

提取的来源(第13行):

10: </div>
11: 
12: <%= form_for(
13:     @voter,
14:     { :controller => "registration_loader",
15:       :action     => "editVoter"
16:     } ) do |f| %>

@voter是指通过以下方式检索的选民对象:

#   Get the voter.
@voter = Voter.where( [ "voter_id = ?", @voterId ] )[ 0 ]
if not @voter
    flash[ :error ] = "NO VOTER!"
    redirect_to :action => 'search'
elsif not @voter.kind_of?( Voter )
    flash[ :error ] = "NO VOTER RECORD! (#{@voter.class.to_s})"
    redirect_to :action => 'search'
end

当我将@voter更改为:voter时,它会停止向我提供错误,但不会使用我要编辑的记录的数据填充视图中的字段。

根据Rails 3.1 API指南,将模型对象传递给form_for应生成允许我编辑该对象中数据的代码,但显然缺少辅助方法(voter_path) 。这个voter_path方法应该在哪里定义,它的正确语义和签名是什么?文档中没有任何地方正在讨论这样的方法,也没有找到任何编写这种方法的例子。

*_path方法应该是自动生成的吗?如果没有,有人可以指向我指定此方法的语法和语义的文档吗?

谢谢, 约翰S。

1 个答案:

答案 0 :(得分:0)

简短回答:不要使用form_for,除非您还设计了代码以使用“资源控制器”。请改用form_tag。添加资源:选民到路线会创建到不存在的控制器的路线。