How to pass more than one argument to Rails validation hooks?

23 views
Skip to first unread message

Wins Lin

unread,
May 30, 2013, 11:55:53 AM5/30/13
to rubyonra...@googlegroups.com
I don't know how to pass many arguments to before_validation hook. I
want to implement the hook on both create and update methods:

before_validation(:on => [:create, :update]) {
// do something
}
But this form of arguments :on => [:create, :update] throws an error:

/active_support/callbacks.rb:403: syntax error, unexpected '[',
expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
... (self.validation_context == :[:create, :update])


This one :on => :create, :update also doesn't work:

syntax error, unexpected ')', expecting tASSOC
before_validation(:on => :create, :update) {


And API has only one example with one argument:

before_validation(:on => :create) do
self.number = number.gsub(/[^0-9]/, "") if
attribute_present?("number")
end

How to pass multiple arguments?

--
Posted via http://www.ruby-forum.com/.

Rafael

unread,
May 30, 2013, 12:03:17 PM5/30/13
to rubyonra...@googlegroups.com
Per this: http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks

before_validation only occurs/runs on create and update

try this:
before_validation do |object_name|
   #some code
end 

Wins Lin

unread,
May 30, 2013, 12:14:25 PM5/30/13
to rubyonra...@googlegroups.com
Rafael wrote in post #1110688:
> Per this:
>
http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks
>
> before_validation only occurs/runs on create and update
>

Thank you. I found an explanation. Just to pass :on => save will include
both:

class Person < ActiveRecord::Base
# it will be possible to update email with a duplicated value
validates :email, :uniqueness => true, :on => :create

# it will be possible to create the record with a non-numerical age
validates :age, :numericality => true, :on => :update

# the default (validates on both create and update)
validates :name, :presence => true, :on => :save
end
Reply all
Reply to author
Forward
0 new messages