Up
Any thoughts?
On Wednesday, October 14, 2015 at 9:50:40 AM UTC+2, Benjamin B wrote:
>
> Greeting,
>
>
> Want to gather your [image: :+1:] and [image: :-1:] on an idea I had,
> before spending time working on a PR.
>
>
> *The idea is simple*
> The same way that ActiveModel::Validations::ClassMethods#validates
> accepts the option on to specify the contexts where this validation is
> active, I'm thinking to add the option except to exclude contexts where
> the validation is active.
>
>
> *Use case*
> Publication has many Page, AttachmentFile, Image, Comments etc...
>
> All those model have their own set of validation that execute on *create*
> and on *update*. Few of them are quite expensive (such as triggering
> database access to verify uniqueness)
>
> Publication can be *published*. Before publishing we run a specific set
> of validations with on: :publishing options. Those validation are not
> needed for the model to exist on the database, but needed for the
> publishing operation. But, we don't want to run again the expensive
> original sets of validation, we assume they are already valid anyhow
> because the record exists in the database.
>
>
> *How to do*
> Currently, this works perfectly:
>
>
> with_options unless: Proc.new { |record| record.validation_context ==
> :publishing } do |record|
> record.validates_presence_of :things
> record.validates_uniqueness_of :fields, scope: :publication_id
> end
>
> with_options on: :publishing do |record|
> record.validates_presence_of :pages
> end
>
>
> *Suggestion*
> But it is not very intuitive and require to dive a bit into the source
> code to find about validation_context before being able to implement it.
>
> So I would suggest to write:
>
>
> with_options except: :publishing do |record|
> ...
> end
>
>
> Thoughts?
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.