Agreed, the documentation is wrong.  The question now is should the
documentation just be updated or should some kind of deprecation
warning or exception be put in place to identify this change to users
who are upgrading their 2.3.x applications?  I found this while
upgrading our 2.3.x application. A validation test was failing, but
there was no indication as to why.  It took a while to figure out the
:on value was to blame.

Peer

On Wed, Feb 16, 2011 at 4:03 PM, Jason King <j...@handle.it> wrote:
> Docs are wrong, `:save` is not the default, the default is that the context
> will be set (to either :create or :update) based on `new_record?` - :save is
> never a valid value for `:on` unless you're going to pass that context to
> your valid? and save calls, eg. this will both work correctly with `:on =>
> :save` in your validation(s):
>
> valid? :save  # => false
> save :context => :save  # => false
>
> But obviously that's not really what the docs were trying to suggest :)
> On Wed, Feb 16, 2011 at 12:49 PM, Peer Allan <pal...@allanweb.ca> wrote:
>>
>> Hello all,
>>
>> I think I have found an interesting bug in the validations.  The
>> reason I say might is because I don't know if it was intentionally
>> constructed this way or not.
>>
>> ActiveRecord docs describe the validates_as_* methods as accepting
>> the :on argument with the options of :create, :update and :save
>> (default :save).  If you explicitly set argument to :on => :save that
>> validation if forever skipped.  The context or state of the model
>> (:create or :update) does not matter.
>>
>> class Topic < ActiveRecord::Base
>>  validates_presence_of :title, :on => :save
>> end
>>
>> t = Topic.new(:title => '')
>> t.valid?  => true
>>
>> t = Topic.find(1)
>> t.title = ''
>> t.valid?  => true
>>
>> I have verified this with tests in ActiveRecord.
>>
>> My question is should this be fixed so that :save is a valid option or
>> should it be left as is and the documentation updated to no longer
>> show :save as a valid option?
>>
>> Related to this, if you attempt to send the :on argument to a
>> validates_* of a class that uses ActiveModel::Validations#valid?
>> (ActiveRecord overrides it) to do its validation then they will not
>> work.
>>
>> class Foo
>>  include ActiveModel::Validations
>>
>>  attr_accessor :title
>>
>>  validates_presence_of :title, :on => :save
>> end
>>
>> f = Foo.new
>> f.title = ''
>> f.valid? => true
>>
>> Again, is this expected behaiour?
>>
>> Peer
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Core" group.
>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>> To unsubscribe from this group, send email to
>> rubyonrails-core+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-core?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-core+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-core?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to