Ruby on rails 为什么我的自定义验证不能在Rails中运行?
这是我的模型:Ruby on rails 为什么我的自定义验证不能在Rails中运行?,ruby-on-rails,ruby-on-rails-3,validation,Ruby On Rails,Ruby On Rails 3,Validation,这是我的模型: class Goal < ActiveRecord::Base belongs_to :user validate :progress_is_less_than_max private def progress_is_less_than_max if progress > max errors.add(:progress, "should be less than max") end end
class Goal < ActiveRecord::Base
belongs_to :user
validate :progress_is_less_than_max
private
def progress_is_less_than_max
if progress > max
errors.add(:progress, "should be less than max")
end
end
end
它保存得很好,没有任何错误。我做对了什么?好吧,这不是编写自定义验证器的方式:您的自定义验证器应该继承自ActiveModel::EachValidator
有关客户验证程序的示例,请参见此rails cast的底部:好吧,这不是编写自定义验证程序的方式:您的自定义验证程序应该继承自ActiveModel::EachValidator
有关客户验证程序的示例,请参见此rails cast的底部:@jaydel在这方面是正确的。create将返回模型的实例,无论它是否保存在数据库中 如果验证通过,则创建一个或多个对象并将其保存到数据库。无论对象是否成功保存到数据库,都会返回结果对象 但是,呼叫。保存!在.create'd模型上或调用.create!首先,如果验证失败,将引发异常 创建一个对象,就像ActiveRecord::Base.create一样,但调用save!而不是保存,以便在记录无效时引发异常 .save将运行验证,但如果验证失败,则返回false 默认情况下,保存始终运行验证。如果其中任何一个失败,操作将被取消,并且save返回false。但是,如果您提供:validate=>false,则完全忽略验证。有关更多信息,请参阅ActiveRecord::Validations
@jaydel在这一点上是正确的。create将返回模型的实例,无论它是否保存在数据库中 如果验证通过,则创建一个或多个对象并将其保存到数据库。无论对象是否成功保存到数据库,都会返回结果对象 但是,呼叫。保存!在.create'd模型上或调用.create!首先,如果验证失败,将引发异常 创建一个对象,就像ActiveRecord::Base.create一样,但调用save!而不是保存,以便在记录无效时引发异常 .save将运行验证,但如果验证失败,则返回false 默认情况下,保存始终运行验证。如果其中任何一个失败,操作将被取消,并且save返回false。但是,如果您提供:validate=>false,则完全忽略验证。有关更多信息,请参阅ActiveRecord::Validations
你的用户有很多目标吗?也就是说,您是否在用户模型中明确指定与has_many方法的关联?请尝试使用create而不是create@Dorian,创建并保存!抛出预期的错误。谢谢……这太让人困惑了。@maprihoda,是的。试试这个:如果self.progress>self.max出错,private def progress\u小于\u max。添加:progress,应该小于max end end end你的用户有多少目标?也就是说,您是否在用户模型中明确指定与has_many方法的关联?请尝试使用create而不是create@Dorian,创建并保存!抛出预期的错误。谢谢……这太令人困惑了。@maprihoda,是的。试试这个:如果self.progress>self.max出错,private def progress\u小于\u max。添加:progress,应该小于max end endNo,他的方法应该有效,我的方法有效:不,他的方法应该有效,我的有效:
some_user.goals.create! :name => 'test', :max => 10, :progress => 15, :unit => 'stuff'