I can see some advantge of declaring a validation dependency. Checking
if an age is less than 16 makes no sense if the age has failed a
validation on being a number already.
maybe something like:
class User < AR::Base
validates_numericality_of :age
#custom validation
validate :user_older_16, :depends => :age
def user_older_16
errors.add(:age, "should be older 16") if age <= 16
end
end
Where :user_older_16 would only run if age has no errors. In the
context shown above this is a sensible dependency, but used
incorrectly the concerns expressed by others would be valid.
Another suggestion:
class User < AR::Base
validates_with_dependency do
validates_numericality_of :age
validate :user_older_16
end
def user_older_16
errors.add(:age, "should be older 16") if age <= 16
end
end
In the above the validations in the validate_with_dependency block
would execute in order, exiting the sequence if any fail.
I think the suggestion to have dependent validaiton is a good one as
it allows for structuring simiple validations where you know a
validation cannot possibly pass if an earlier one has failed.
Cheers,
Anthony Richardson.
On Thu, Jun 21, 2012 at 8:26 PM, Pavel Gabriel <[email protected]> wrote:
> Hi!
>
> I found that it's a popular use case for AR/AM validations:
>
> class User < AR::Base
> validates_numericality_of :age
>
> #custom validation
> validate :user_older_16
>
> def user_older_16
> errors.add(:age, "should be older 16") if age <= 16
> end
> end
>
> When you will try to validate as the following:
>
> user = User.new(age: 'bla')
> user.valid?
>
> you will get: ArgumentError: comparison of String with 16 failed.
>
> Folks write a lot of code to check attribute values in their custom
> validations, but it's not a DRY way because attributes already validated by
> AM.
>
> Is it a good idea to run validation methods only if errors.count == 0?
>
> Or maybe we can add something like "validate_further :user_older_16" that
> will run only if attributes are valid?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-core/-/Ca3mpVVPWlgJ.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.