Ruby on rails 3 验证:存在vs验证使用rails 3的存在

Ruby on rails 3 验证:存在vs验证使用rails 3的存在,ruby-on-rails-3,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 我得到一个500错误: Act

我有几个简单的模型,它们是这样关联的:

模型

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
我得到一个500错误:

ActionView::Template::Error (uninitialized constant User::Task):
NameError in View file
当我使用:

validates :name, :presence => true ,  :message => 'Name cannot be blank, Task not saved'
validates_presence_of :name
一切正常

我认为上面的两种验证方法都是相同的…问题在于关联以及验证如何与关联模型相关联。我有一种预感,事情的关联方式正在发生变化,但这只是一种预感


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

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

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

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

我对这方面的国际化有一个问题。如果Rails提供了字段名,那么如何完全本地化此错误消息?例如,在西班牙语中,“name”应该是“nombre”。有没有办法完全抑制默认消息?我知道这是一篇旧文章,但是这个错误消息应该显示在哪里,例如提交表单后是否显示?非常感谢。