Ximik
Ximik

Reputation: 2495

ArgumentError: You need to supply at least one validation with :if

I have a simple model

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

  def deadline_in_future?
    Date.today < self.deadline
  end
end

All seems ok, but when I in my rails console

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

Where is the problem?

Upvotes: 42

Views: 38793

Answers (3)

mu is too short
mu is too short

Reputation: 434685

You forgot to tell validates how you want to validate :deadline. I think you're misunderstanding what :if does; the :if => :deadline_in_future? option means:

Validate :deadline only if the deadline_in_future? method returns a true value.

I suspect that you want to validate that the deadline is in the future:

validate :deadline_in_future?

Further details are available in the Active Record Validations and Callbacks Guide.

Upvotes: 49

zarne
zarne

Reputation: 1329

You must change validates to validate.

Upvotes: 132

KL-7
KL-7

Reputation: 47628

It says you do not pass any validations to validates method. Like validates :presence, for example. What are you trying to validate?

Upvotes: 3

Related Questions