Pero tengo el problema que en validates_presence_of :login, :if =>
:validar_login? no me esta funcionando porque me guarda el registro y el
login que le estoy dando es incorrecto, es decir, no me da error antes
de
incluir.
mmm, pues ahi esta diciendo que valide la presencia de login, si el
login es
valido, por tanto si no es valido ( validar_login? de false) no validas
la
presencia de login, lo cual no creo que sea ni cercas de lo que
necesitabas
pues seria algo asi como
if loginValido
if login && login.length > 0
#guarda registro
else
#no guardes
end
else
#guarda registro
end
o algo por el estilo, pero creo que esta muy lejos de lo que buscabas,
en
cambio lo que propones me parece buena solucion, el validarlo
en el controlador donde se recibe y si todo esta bien guardarlo. lo
unico
que me saco un poquito fue ese @rifvalido ← que no vi de donde venia
pero
supongo que tiene que ver con login valido o algo mas de tu logica =P,
pero
suerte, a mi me parece bien la solucion de hecho tengo algo similar en
algunos de mis controladores.
Ing. Omar S. Jimenez Becerra
El dÃa 3/05/08, Manuel P. [email protected] escribió:
Gracias por la explicacion, tanto Omar como Ruben.
Les comento que si accedo al valor mediante: self.login entonces cree mi
metodo (validar_login) en el modelo que devuelve true o false si la
sintaxis
del campo Login del usuario es correcta o no.
Pero tengo el problema que en validates_presence_of :login, :if =>
:validar_login? no me esta funcionando porque me guarda el registro y el
login que le estoy dando es incorrecto, es decir, no me da error antes
de
incluir.
Entonces les comento a ustedes (Omar y Ruben) y a todos mis colegas de la
lista RoR-es que he encontrado otra solucion que me funciona
perfectamente
pero necesito saber si es la solucion mas optima (a nivel de codigo)
alli
les va.
En el controller (users_controller.rb) tengo lo siguiente:
def create
@loginvalido = User.validar_login(params[:user][:login])
@user = User.new(params[:user])
respond_to do |format|
if @user.save and @rifvalido
flash[:notice] = ‘Los datos han sido registrados
satisfactoriamente.’
format.html { redirect_to(@user) }
format.xml { render :xml => @user, :status => :created, :location
=> @user }
else
@user.errors.add (‘login’,‘^El campo Login es Inválido.’)
format.html { render :action => “new” }
format.xml { render :xml => @user.errors, :status =>
:unprocessable_entity }
#sintaxis del login que me llega por parametro
…
…
end
ENTONCES QUE LES PARECE COLEGAS DE LA LISTA??? ES OPTIMA LA SOLUCION?? ES
MUCHO MEJOR??
ESPERO SUS OPINIONES AL RESPECTO…
MUCHAS GRACIAS!!!
El dÃa 3 de mayo de 2008 12:46, Ruben. D. [email protected]
escribió:
Hola Manuel, ahora si se te entiende algo mejor, para hacer lo que
necesitas es suficiente con lo que te dice Omar, pero creo que tienes
que
saber como funciona el tema, aqui alguna aclaracion:
self es como un puntero en Ruby que apunta a la instancia que tienes en
un momento momento determinado de esa clase, entonces podrias hacer lo
siguiente:
class User < ActiveRecord::Base
def tu_metodo
if self.login.blank?
…
end
end
end
self.login te devolvera el valor que tienes para el atributo login en
una determinada instancia de la clase User(osea un objeto), por ejemplo
si
tenemos lo siguiente:
@user = User.new(:login => ‘[email protected]’)
Entonces cuando llames a @user.tu_metodo tendras disponible el valor del
atributo login a traves de self.login en la definicion de tu clase, otra
cosa es importante es que esto tambien funciona:
class User < ActiveRecord::Base
def tu_metodo
if login.blank?
…
end
end
end
Aqui no usamos self, y lo que hace Ruby es verificar primero si login es
una variable local, si no existe esa variable entonces se fija si existe
un
metodo con ese nombre lo cual si existe, esta manera de comprobar el
valor
devuelto por un metodo de una clase no es algo recomendable ya que
conforme
tu codigo vaya creciendo te crearas confusiones tu mismo ya que no
sabras si
estas llamando a una variable local o a un metodo, por lo que se
aconseja
siempre usar la notación self.atributo cada vez que quieras invocar a un
metodo que es un getter.
Saludos.
El dÃa 2 de mayo de 2008 11:47, Omar J. [email protected]
escribió:
segun recuerdo uso eso yo, en algunos modelos y va bien, me dices que
tal va
Ing Omar S. Jimenez Becerra
El dÃa 2/05/08, Manuel P. [email protected]
escribió:
hola manuel gonzalez no se trata de eso…
las instrucciones que colocaste:
@user = User.find(1)
@user.login
se usan sin problemas en el controller pero si tu colocas esas
instrucciones en el modelo
He colocado
El dÃa 3 de mayo de 2008 11:36, Manuel González Noriega <
[email protected]> escribió:
2008/5/2 Manuel P. [email protected]:
OJO YO SE QUE PUEDO VALIDAR EL LENGTH DE UNA CADENA CON:
validates_length_of
ESO LO DESDE QUE COMENCE A PROGRAMAR BAJO RoR…
Necesito acceder al valor del parametro del campo de la tabla
para hacer
unas validaciones especificas mediante un algoritmo un poco
complejo…
¿Quieres decir acceder algo como recuperar el login del usuario
con id 1?
@user = User.find(1)
@user.login
?
Si se trata de eso, espero que te sirva, pero deberÃas considerar
el
estudiar con detenimiento algunos tutoriales de iniciación a
Rails y
ActiveRecord porque este mapeo es una de las caracterÃsticas más
básicas del framework en lo referente al trabajo con base de
datos.