ArgumentError:您需要提供至少一个验证:if

Xim*_*mik 30 validation ruby-on-rails ruby-on-rails-3.1

我有一个简单的模型

class Task < ActiveRecord::Base
  validates :deadline, :if => :deadline_in_future?

  def deadline_in_future?
    Date.today < self.deadline
  end
end
Run Code Online (Sandbox Code Playgroud)

一切似乎都好,但是当我在我的rails控制台时

irb(main):001:0> Task.new
ArgumentError: You need to supply at least one validation
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

小智 94

你必须validates改为validate.

  • @yeyo因为它是自定义验证的语法.请参阅[Active Record Validations Doc中的自定义方法](http://guides.rubyonrails.org/active_record_validations.html#custom-methods) (3认同)

mu *_*ort 43

你忘了告诉validates你想要如何验证:deadline.我觉得你误解了是什么:if意思; 该:if => :deadline_in_future?选项意味着:

:deadline仅在deadline_in_future?方法返回true值时才进行验证.

我怀疑你想确认截止日期是在未来:

validate :deadline_in_future?
Run Code Online (Sandbox Code Playgroud)

" Active Record Validations and Callbacks Guide"中提供了更多详细信息.