使用rails 3验证:presence与validates_presence_of

时间:2011-02-22 13:51:42

标签: ruby-on-rails-3

我有几个简单的模型,如下所示:

模型

class Task < ActiveRecord::Base
  belongs_to :user
  validates :name, :presence => true, :message => 'Name cannot be blank, Task not saved'
end

class User < ActiveRecord::Base
  has_many :tasks
end

VIEW中有一个调用,如下所示: user.tasks&lt; - 然后我循环完成任务

问题:

在任务模型中 -

当我使用时:

validates :name, :presence => true ,  :message => 'Name cannot be blank, Task not saved'

我收到500错误:

ActionView::Template::Error (uninitialized constant User::Task):
NameError in View file

当我使用时:

validates_presence_of :name

一切正常。

我认为两者都验证了上面相同的方法......问题与关联有关,以及验证如何与相关模型联系起来。我预感到事情的发展方式正在发生,但这只是一种预感。

任何帮助将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:48)

当您使用较新的validates :name格式时,您可以将多个验证放在一行中,而不必为每种类型的验证设置多行。因此,当Rails命中您的:message参数时,它认为它是一种验证方法,而不是与:presence相关联的消息。试试这个:

validates :name, :presence => {:message => 'Name cannot be blank, Task not saved'}

此外,根据您显示错误的方式,此错误实际上可能会显示为“名称名称不能为...”;如果是这样,您将要将消息设置为“不能为空,任务未保存”。