Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我的自定义验证不能在Rails中运行?_Ruby On Rails_Ruby On Rails 3_Validation - Fatal编程技术网

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'