我刚刚使用带有Rails的脚手架设置了一些基本模型,我编辑了视图,以便我从文本字段和选择框中获取输入.以下是一些代码段:
form_for(@town) do |f|
f.text_field :name
.
.
f.select :county_id, @counties.map{|c| [c.name, c.id]}
.
.
end
对文本字段使用验证方法"validates_presence_of"并且在选择框上没有验证我可以输入值并成功写入数据库.当我尝试通过不在文本字段中输入任何内容来测试验证时,我得到一个带有以下消息的NoMethodError
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map
注意:选择框上没有验证
如果我注释掉"validate_presence_of"行,我可以将空白数据写入数据库,没有任何问题.但是,如果我为文本字段编写验证代码并且它导致整个表单对象显然变为零...... Rails的验证是否会导致此问题?
任何想法/意见都非常感谢.我使用Rails 2.3.4
您还没有发布的堆栈跟踪,但我假设当你调用错误发生map
的@counties
.
您的控制器可能在处理表单时有两个操作.一个(new
或者edit
)显示表单并响应获取请求.另一个(或者)create
或者update
创建或更新模型.这会响应post或put请求,如果成功则重定向,new
或者edit
在有验证错误时(如果save
失败)呈现或动作.
我希望你的new
或edit
行动有一些代码分配给你@counties
.您create
或update
操作还需要@counties
在save
失败时进行分配,以便在视图中可用.