我正在使用我知道正在运行的模型(记录存在于数据库中,可以搜索并在其他视图中显示等)但是当我尝试使用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。
答案 0 :(得分:0)
简短回答:不要使用form_for,除非您还设计了代码以使用“资源控制器”。请改用form_tag。添加资源:选民到路线会创建到不存在的控制器的路线。