[Ror-es] usar un mismo metodo para validar dos atributos de un modelo

Borja Martín borjam at dagi3d.net
Sat Nov 14 14:06:15 GMT 2009


Para que funcionase el método debería ser público. De todas maneras veo un
problema con esto. Cuando llama llamas al método validate, al bloque se le
pasa la instancia del modelo, no el valor del atributo es decir, que los dos
validates que tienes estás haciendo lo mismo dos veces(y luego estarías un
match de la instancia, no de una cadena de texto)
Si vas a validar frente a una expresión regular puedes usar el método
validates_format_of con algo en este plan:

validates_format_of [:phone_number, :fax_number], :with => /^\(\d\d\d\)
\d\d\ \d\d \d\d/

De todas maneras yo no sería tan exquisito para validar un número de
teléfono y me limitaría a comprobar que no esté vacio si así fuera necesario
ya que el obligar a usar determinada notación para introducirlo puede ser un
tanto molesto para el usuario.

Saludos


2009/11/14 Andrés gutiérrez <andresgutgon at gmail.com>

> hola, quiero validar el formato de un campo phone y un campo fax. Y quiero
> usar un mismo metodo (private) para hacerlo.
> Aquí[1] he visto que se le puede pasar un bloque al metodo validate. Lo que
> tengo hasta ahora es esto
>
>   validate do |phone|
>     phone.valid_phone
>   end
>   validate do |fax|
>     fax.valid_phone
>   end
>
> private
>   def valid_phone
>     return true if self.blank?
>     phone_formats = [/^\(\d\d\d\) \d\d\ \d\d \d\d/]
>
>     valid = false
>     phone_formats.each do |format|
>       if self.match( format )
>         valid = true
>       end
>     end
>
>     unless valid
>       errors.add :self,"#{self} format isn't recognized, must be something
> like that 933 00 00 00."
>     end
>   end
>
> Lo he probado por consola pero me da este error:
>
> NoMethodError: Attempt to call private method
>
> PIENSO:
> Que me estoy perdiendo algo a la hora de usar self. ¿igual no se usa asi o
> qué?
>
> [1]
> http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html
> --
> Experiencia es lo que obtienes, cuando no obtienes lo que quieres.
>
> -----------------------------------------------------------------------------
> "Caminar sobre el agua y desarrollar software a partir de unas
> especificaciones es fácil. si ambas están congeladas."
> Edward V. Berard, ingeniero informático.
>
> _______________________________________________
> Proudly free of Ruby Forum crossposting since 01/07/2009
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>


-- 
def dagi3d(me)
 case me
   when :web then  "http://dagi3d.net"
   when :twitter then "http://twitter.com/dagi3d"
 end
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20091114/1fc8a8cd/attachment.htm 


More information about the Ror-es mailing list