Llamar funcion desde un modelo

Sergio Cambra .:: entreCables - Symbol Servicios
wrote:

El Friday 07 November 2008 16:09:36 Jhon K. escribió:

validates_format_of :nombre, :with => /\A[
Es que creo que el validates_format_of requiere una expresi�n regular
Tienes razon pana con respecto a q requiere una expresion y no un

archivos actualizando la expresion.
Hasta ahora me funciona, cualquier cosa te avisare si la actualizo a
hago alguna modificacion.

Muchas gracias por la ayuda, que bueno es este foro

para eso en vez de usar un metodo usa una constante, por ejemplo cambia
lib/utils.rb:
module Utils
CONSTANTE = /\A[,º&%;:="(){}?¿’|$#a-zA-Z0-9@/\t\r\n._-]*\z/
end
o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
Yo lo
veo mejor así si esa expresion regular solo se usa para ese modelo.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

La uso para todos los modelos mas de 50 archivos por eso quiero que sea
algo global y que modifique en un solo archivo

Fernando G. wrote:

El d�a 7 de noviembre de 2008 15:26, Fernando G.
[email protected]
escribi�:>
Cag�en… en primer lugar es al rev�s: =~ sorry:

class String - RDoc Documentation

En segundo lugar creo que el error est� en el modelo, prueba as�:

validates_format_of :nombre, :with => /\A[
,�&%;:="(){}?�’|$#����������a-zA-Z0-9@/\t\r\n._-]*\z/,
:message =>“debe ser valido”

O igual mejor directamente:
validates_format_of :nombre, :with =>
/\A[,�&%;:="(){}?�’|$#����������a-zA-Z0-9@/\t\r\n._-]*\z/ , :message
=>“debe ser valido”

Es que creo que el validates_format_of requiere una expresi�n regular
no un booleano:

Peak Obsession

Lo que intentas es implementar un nuevo m�todo de validaci�n y eso no
s� como se hace sorry.

f,

Tienes razon pana con respecto a q requiere una expresion y no un
booleano, yo queria declarar una variable global q contenga la cadena
con la expresion pero me da error, pero con tu ayuda e solucionado de
esta manera
-en el environment.rb
coloque esto require ‘utils.rb’

-en el modelo
validates_format_of :nombre, :with => Utils.is_valid(:nombre),
:message =>“debe ser valido”

  • en lib/utils.rb
    class Utils
    def self.is_valid( string )
    return num_expr = /\A[
    ,º&%;:="(){}?¿'|$#a-zA-Z0-9@/\t\r\n._-]*\z/
    end
    end

de esta forma retorno la expresion, y si tengo que modificar la
expresion solo la modifico en este archivo y no tengo q ir a todos los
archivos actualizando la expresion.
Hasta ahora me funciona, cualquier cosa te avisare si la actualizo a
hago alguna modificacion.

Muchas gracias por la ayuda, que bueno es este foro

Sergio Cambra .:: entreCables - Symbol Servicios
wrote:

El Friday 07 November 2008 16:38:53 Jhon K. escribió:

archivos actualizando la expresion.
o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
Yo lo
veo mejor así si esa expresion regular solo se usa para ese modelo.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

La uso para todos los modelos mas de 50 archivos por eso quiero que sea
algo global y que modifique en un solo archivo

Entonces puedes ponerla en lib, dentro del modulo Utils, como una
constante.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

eso se me olvido preguntarte te refieres a esto

module Utils

CONSTANTE = /\A[,º&%;:="(){}?¿’|$#a-zA-Z0-9@/\t\r\n._-]*\z/
end

esto seria loq va en el archivo lib/utils.rb en lugar de la funcion?

en lugar de esto
class Utils
def self.is_valid(string)
return num_expr = /\A[ ,º&%;:="(){}?¿’|$#a-zA-Z0-9@/\t\r\n._-]*\z/
end
end

colocaria esto
class Utils
module Utils
CONSTANTE = /\A[,º&%;:="(){}?¿’|$#a-zA-Z0-9@/\t\r\n._-]*\z/
end
end

??

Modelo …

# app/models/user.rb
class User < ActiveRecord::Base

  validates_format_of :email, :with => EMAIL_FORMAT

end

Donde EMAIL_FORMAT es una expresion regular que la hemos definido en
un initializer.

# config/initializers/defaults.rb
EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

Creo que así queda más limpio. No?

2008/11/7 Jhon K. [email protected]:

El Friday 07 November 2008 16:38:53 Jhon K. escribió:

archivos actualizando la expresion.
o no uses el lib/utils.rb, y pon la constante directamente en el modelo.
Yo lo
veo mejor así si esa expresion regular solo se usa para ese modelo.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

La uso para todos los modelos mas de 50 archivos por eso quiero que sea
algo global y que modifique en un solo archivo

Entonces puedes ponerla en lib, dentro del modulo Utils, como una
constante.


Sergio Cambra .:: entreCables - Symbol Servicios Informáticos S.L. ::.
Nicolás Guillén 6, locales 2 y 3. 50.018 Zaragoza
T) 902 021 404 F) 976 52 98 07 E) [email protected]

Ostras, no se me habia ocurrido que alguien pudier hacer eso. :wink:

La verdad es que de momento con esa expresion regular nunca he visto
nada raro en la base de datos, sobretodo cuando mandas un email para
validar la direccion, pero es bueno saberlo.

On 08/11/2008, at 20:32, Guillermo Álvarez Fernández
<[email protected]

El 07/11/2008, a las 18:27, Francesc E.
escribió:

un initializer.

config/initializers/defaults.rb

EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i

Cuidado con esa expresión regular, que es muy peligrosa y ya la he
visto en varias aplicaciones.

El siguiente texto es un email válido para esa misma
expresión > bad_text = <<-END

[email protected]

END

bad_text =~ EMAIL_FORMAT
0

Como vemos la expresión es váldia para el texto anterior, ya que es
verdad que le estamos diciendo si existe alguna linea que empiece y
termine con una dirección de correo electrónico. El resto de lineas da
igual.
Lo correcto, salvo que me equivoque, sería substituir ^(principio de
linea) por \A(principio de texto) y $(final de linea) por \z(fin de
texto)

EMAIL_FORMAT = /\A([^@\s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})\z/i

Yo suelo usar esta: La anterior, ve validaría cosas como
"Guillermo.Á[email protected]
" al permitirme incluir tildes en el user del email.
/\A([\w.-+]+)@((?:[-a-z0-9]+.)+[a-z]{2,})\z/i

Un Saludo

Si, funciona correctamente aunque le hagan marranadas, cuando tenga un
momento subo unos tests.

On 10/11/2008, at 14:04, Jhon K. [email protected]

Francesc E. wrote:

Modelo …

# app/models/user.rb
class User < ActiveRecord::Base

  validates_format_of :email, :with => EMAIL_FORMAT

end

Donde EMAIL_FORMAT es una expresion regular que la hemos definido en
un initializer.

# config/initializers/defaults.rb
EMAIL_FORMAT = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

Creo que así queda más limpio. No?

2008/11/7 Jhon K. [email protected]:

en mi proyecto tengo una carpeta llamada config pero en ella no tengo
una carpeta llamada initializers por lo tanto tampo el archivo
defaults.rb

Deberias estar ahi a los creo qpara probar lo q me estas diciendo?

A partir de Rails 2.0 hay una carpeta llamada initializers donde hay
varios archivos. Cualquier cosa que metas alli se cargará
automáticamente cuando Rails arranque.

Si no lo tienes, puede ser porque todavia este ls en Rails 1.x o
porque la hayas borrado. Siempre puedes meter un require en el fichero
‘environment.rb’.

On 10/11/2008, at 14:32, Jhon K. [email protected]

Francesc E. wrote:

A partir de Rails 2.0 hay una carpeta llamada initializers donde hay
varios archivos. Cualquier cosa que metas alli se cargará
automáticamente cuando Rails arranque.

Si no lo tienes, puede ser porque todavia este ls en Rails 1.x o
porque la hayas borrado. Siempre puedes meter un require en el fichero
‘environment.rb’.

On 10/11/2008, at 14:32, Jhon K. [email protected]

Si estoy utilizando la version 1.2.6 por requirimientos que me pidieron,
entoncs por eso no tengo esa carpeta y archivos, ya habia intentado
hacerlo en el
environment.rb de esat manera por ejemplo:

ENV[‘cadena_validacion’] ||= /\A[
,º&%;:="(){}?¿'|$#áéíóúÁÉÍÓÚa-zA-Z0-9@/\t\r\n._-]*\z/

pero al reiniciar el servidor no arranca, por esto solucione de la
manera que ya explique antes y me a funcionado pero estoy de acuerdo
contigo con una constante queda más limpio.

Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. [email protected]

Esta es la que estoy utilizando
/\A[ ,º&%;:="(){}?¿’|$#a-zA-Z0-9@/\t\r\n._-]*\z/

y tienes razon, la utilizo de esta manera por que asi no me da problemas

Francesc E. wrote:

Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. [email protected]

tengo una pregunta ,con lo que me has sugerido y con la solucion que yo
e encontrado, tienes alguna idea de por que si coloco las letras con
acentos la expresion no las validas, por ejemplo áÁ …etc? pero si la
coloco de una vz en el modelo lo valida corectamente

Francesc E. wrote:

Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. [email protected]

tengo una pregunta ,con lo que me has sugerido y con la solucion que yo
e encontrado, tienes alguna idea de por que si coloco las letras con
acentos la expresion no las validas, por ejemplo áÁ …etc? pero si la
coloco de una vz en el modelo lo valida corectamente

Francesc E. wrote:

Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. [email protected]

Gracias e aclarado muchas dudas

Francesc E. wrote:

Al menos una constante da un warning si la modificas en algun sitio de
tu aplicación. Lo de meterlo como variable de entorno no lo habia
visto antes.

On 10/11/2008, at 14:46, Jhon K. [email protected]

Ya solucione el problema, con el que tu y otros compa-eros me ayudaron
El problemas era por el encoding del fichero
los q no tenian problemas eran UTF-8 y los q daban error eran ANSI
lo que hic fue cambiar el encoding a UTF-8 y ya puedo tener mi
expresion en una variable global en el environment.rb

Gracias.