[ruby-it] Riutilizzo delle validazioni

Pietro Giorgianni giorgian a gmail.com
Dom 31 Gen 2010 14:09:05 CET


Il 31 gennaio 2010 12.23, pezzuya .. <pezzuya-gruppi a yahoo.it> ha scritto:
>> Lascio a te trovare il modo di passare argomenti a validates_email.
>> Magari guarda come fa active record nel suo file
>> lib/active_record/validations.rb
>
> Grazie Paolo.
> Non ho sott'occhio "validation.rb" ma, in teoria, se la validazione
> richiedesse degli argomenti non mi basterebbe passarglieli alla
> chiamata?
>
> per esempio così:
>
> validates_email(argomento1, argomento2, ...)
>
> Alla fine una validazione dovrebbe essere come una semplicissima azione
> o mi sbaglio?

in validation.rb, i metodi di validazione si appoggiano a validates_each
http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002161

L'help riporta un esempio semplice:
  class Person < ActiveRecord::Base
    validates_each :first_name, :last_name do |record, attr, value|
      record.errors.add attr, 'starts with z.' if value[0] == ?z
    end
  end

Questo perché il metodo validates_qualcosa viene chiamato durante la
definizione della classe, ma la validazione deve avvenire in una fase
successiva (di default è :on => :save, ma può essere :create o
:update).

Sempre da validations.rb viene un esempio più concreto:

      def validates_format_of(*attr_names)
        configuration = { :on => :save, :with => nil }
        configuration.update(attr_names.extract_options!)

        raise(ArgumentError, "A regular expression must be supplied as
the :with option of the configuration hash") unless
configuration[:with].is_a?(Regexp)

        validates_each(attr_names, configuration) do |record, attr_name, value|
          unless value.to_s =~ configuration[:with]
            record.errors.add(attr_name, :invalid, :default =>
configuration[:message], :value => value)
          end
        end
      end


pietro


More information about the Ml mailing list