Belongs_to => NULL

Hola buenas.

Tengo otra duda o necesidad de consejo.

La duda es la siguiente:

Tengo una tabla inmuebles.

Un inmueble pertenece a una provincia y a una ciudad.

El esquema de tablas es el siguiente:

INMUEBLE
id NOT NULL
nombre
descripcion

provincia_id NOT NULL
ciudad_id

*(La provincia es obligatoria pero la ciudad no)

PROVINCIA
id
nombre

CIUDAD
id
nombre
provincia_id

Los modelos de RoR los tengo así
Inmueble : belongs_to :provincia,:ciudad
Provincia : has_many :inmuebles,:ciudades
Ciudad : has_many :inmuebles,belongs_to: :provincia

No sé si es el esquema de tablas más acertado, se admiten sugerencias.

El caso es que en la vista de inmuebles para acceder al nombre de las
provincias y las ciudades lo hago de la siguhiente manera:

=> inmueble.provincia.nombre
=> inmueble.ciudad.nombre

El problema es que si la ciudad es NULL en la base de datos me da un
error.

¿Como puedo manejar/plantear esto?

La manera mas facil y rapida (y la que solia utilizar en php)es crear un
metodo en inmuebles que sea “devolver_nombre_ciudad” y usarlo e lugar de
inmueble.ciudad.nombre.En este metodo comprobaria si el campo ciudad_id
es null y en ese caso devolveria “Sin ciudad” o sino devolveria el
nombre de la ciudad.

Otra alternativa seria hacer un if en la vista.

if inmueble.ciudad puts inmueble.ciudad.nombre
else puts “Sin clasificar”

Esta solucion me gusta mas pero ya se sabe que no se debe poner logica
en las vistas.

No se si es la manera en la que se plantean estas cuestiones con RoR.
Que me aconsejais?.

Un saludo.

Pensando en objetos, un inmueble está en una ciudad y una ciudad está
en una provincia. Añadir una relación entre los inmuebles y las
ciudades no es correcto. Además, complicaría todo innecesariamente.
Por ejemplo, imagina que quieres dar de alta un inmueble en Bilbao.
¿Qué pasa si le asignas como provincia Madrid en lugar de Vizcaya?

Entonces quedaría algo así (escribo de memoria):

Inmueble:
belongs_to :ciudad

Ciudad:
belongs_to: :provincia
has_many :inmuebles

Provincia:
has_many :ciudades

Y podrías hacer:

inmueble.ciudad.nombre
inmueble.ciudad.provincia.nombre

Salu2,

Javi

El 16/03/07, Alfredo [email protected]
escribió:> Hola buenas.

¿Como puedo manejar/plantear esto?

La manera mas facil y rapida (y la que solia utilizar en php)es crear un
metodo en inmuebles que sea “devolver_nombre_ciudad” y usarlo e lugar de
inmueble.ciudad.nombre.En este metodo comprobaria si el campo ciudad_id
es null y en ese caso devolveria “Sin ciudad” o sino devolveria el
nombre de la ciudad.

Para mi, no solo la mas facil y rapida, sino tambien la correcta!

def nombre_ciudad
if ciudad_id
ciudad.nombre
else
“Sin ciudad”
end
end

Otra alternativa seria hacer un if en la vista.

Otra alternativa seria hacer un if en la vista.

if inmueble.ciudad puts inmueble.ciudad.nombre
else puts “Sin clasificar”

Ojo que el puts no “renderiza”

Hola Javier, gracias por la respuesta.

No la acabo de ver claro.

¿Que ocurre si quiero crear un inmueble sin ciudad?.¿Como podria acceder
entonces a la provincia?.

El problema es ese, que la provincia es obligatoria , pero la ciudad es
opcional.

¿Segun tu explicacion el esquema de tablas seria el mismo?

Gracias

Javier Vidal P. wrote:

Pensando en objetos, un inmueble est� en una ciudad y una ciudad est�
en una provincia. A�adir una relaci�n entre los inmuebles y las
ciudades no es correcto. Adem�s, complicar�a todo innecesariamente.
Por ejemplo, imagina que quieres dar de alta un inmueble en Bilbao.
�Qu� pasa si le asignas como provincia Madrid en lugar de Vizcaya?

Entonces quedar�a algo as� (escribo de memoria):

Inmueble:
belongs_to :ciudad

Ciudad:
belongs_to: :provincia
has_many :inmuebles

Provincia:
has_many :ciudades

Y podr�as hacer:

inmueble.ciudad.nombre
inmueble.ciudad.provincia.nombre

Salu2,

Javi

El 16/03/07, Alfredo [email protected]
escribi�:> Hola buenas.

Salvador, si estas creando un digesto estarias haciendo un hash lo
cual no es reversible.

Lo que deberias hacer es usar encripcion y no digesto, eso si es
reversible.

Saludos

P

Muchas gracias pedro !

Que tal lista, para encriptar el password pues use la funcion de
http://live.com
Ruby On Rails Argentina. http://blogs.onrails.com.ar


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Windows Live Spaces en Prodigy/MSN Spaces: Crea tu propio espacio.
http://spaces.live.com

Que tal lista, para encriptar el password pues use la funcion de

Digest::SHA1.hexadigest(password)

Ahora lo que necesito es recuperar algunos passwod, alguien sabe como
hacerlo, se lo agraceria infinitamente !!

Gacias !!


Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido

Como explico Pedro un hash no es reversible, y es por eso que se usa,
porque las aplicaciones en general no almacenan passwords.

Se guardan esos hashes y cuando se hace login se calcula el hash que
resulta de las credenciales recibidas, con el mismo algoritmo. La
autenticacion entonces se limita a ver si el hash resultante coincide
con el asociado a ese login en la base de datos. Si tienes cuidado de
que los passwords no salgan en los logs:

filter_parameter_logging “password”, “password_confirmation”

entonces los passwords no quedan en ningun lugar.

Esto se hace asi porque como no son reversibles, si alguien tuviera
acceso a la tabla de usuarios y pillara los hashes no seria (en
general) capaz de averiguar los passwords que generan cada uno de
ellos. Mientras que si se usa un algoritmo de encriptacion simetrico
el algoritmo y la llave estan en algun lugar de la aplicacion, y
seguramente rastreables desde la accion que autentica.

¿Que ocurre si quiero crear un inmueble sin ciudad?.¿Como podria acceder
entonces a la provincia?.

El problema es ese, que la provincia es obligatoria , pero la ciudad es
opcional.

¿Segun tu explicacion el esquema de tablas seria el mismo?

La verdad es que es un poco raro el requisito de que pueda haber
inmuebles sin ciudad pero con provincia. En el mundo real, los
inmuebles están en ciudades y las ciudades en provincias. Sigo
pensando que no modelarlo de esta manera va a complicarlo todo.

Tal vez se pueda crear una ciudad ficticia en cada provincia llamada
“Sin ciudad”.

Aunque lo que haría sobre todo sería pensar realmente si es
imprescindible el requisito que apuntas.

Salu2,

Javi

Las funciones hash (md5, sha, y familia) son, como ya te han indicado,
de un solo sentido.
Sin embargo existen herramientas para comparar hashes con algunos
conocidos (los correspondientes a palabras típicas como ‘root’,
‘admin’, ‘paulina’, …).

Una de estas bases de datos de hashes está en
http://www.tmto.org/?category=main&page=search_sha1_dict
[1]

Con un poco de suerte, podrás recuperar las contraseñas si son malas :wink:
Aunque lo mejor sería sobreescribir las existentes.

Un saludo.

[1] Estas herramientas están muy bien, no para “piratear” ni romper
sistemas, sino para comprobar la seguridad de nuestras propias
contraseñas.

Ya que se esta hablando de passwords, me surge una pregunta como puedo
generar un password con caracteres aleatorios, ya saben para la típica
opción de “Perdio su contraseña??”.

Muchas gracias, si creo que la mejor opcion fue la de generar nuevas
contraseñas dado un correo existente.

Joselo aqui esta la funcion que utilize para generar contraseñas aleatorias
espero y te sirva

def new_pass()
tam=8
chars=(“a”…“z”).to_a + (“0”…“9”).to_a
pass=“”
1.upto(tam){|i| pass << char[rand(chars.size-1)]}
return pass
end

Saludos !!

opción de “Perdio su contraseña??”.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Live Search en Prodigy/MSN. Todo lo que buscas ahora más rapido

Listo muchas gracias

Hola.

En http://www.lacoctelera.com/ror-lab tengo un post para generalizar un
poco
la generación de palabras aleatorias. Espero les sirva.

Saludos,

Luis Felipe.

El día 22/03/07, salvador zalapa [email protected] escribió: