Hola, estaba siguiendo el post “relación circular de una entidad” y
he visto que le recomiendan cambiar la relación a has_one (1 a 1
entre dos tablas)
Me he puesto a googlear ya que estaba probando una relación de ese
tipo y creo que estoy metiendo la pata
Por lo que he encontrado en google me he fijado que solo pasan un id,
por ejemplo:
- personas (1 a 1 con) - telefonos
id id
… persona_id
… …
entonces según lo leído en google seria algo como
class Persona < ActiveRecord::Base
has_one :telefono
end
class Telefono < ActiveRecord::Base
belongs_to :persona
end
¿es esto correcto???
Yo siempre creí que en una relación 1 a 1 se intercambian ambas
tablas las claves quedando el ejemplo anterior así
- personas (1 a 1 con) - telefonos
id id
telefono_id persona_id
… …
y luego
class Persona < ActiveRecord::Base
has_one :telefono
belongs_to :telefono
end
class Telefono < ActiveRecord::Base
has_one :persona
belongs_to :persona
end
Alguien me puede orientar? muchas gracias por la ayuda.
Un saludo.
Hola
Le recomiendo cambiar a una relación 1:1 por el código que tenia en la
vista, solo buscaba 1 resultado, por lo que le convenÃa usar has_one.
Con respecto a lo de las relaciones que planteas, no estás metiendo la
pata,
lo que pasa es que la forma de definir las relaciones en Rails es a
veces un
poco distinta a como lo harÃas si trabajas con SQL directamente.
has_one, has_many, belongs_to, etc, no solo definen la relación entre
los
objetos(tablas) sino que agregan algunos métodos a ellos dependiendo del
tipos de ralación, que a su ves generan los comandos sql para traer y
llevar
los datos.
Por esta razón Rails define que el foreign key debe ir del lado que
tiene el
belongs_to para que la relación entre los objetos se arme correctamente,
recuerda también el tema de los plurales que a muchos puristas de sql
les
molesta mucho :
Persona HAS_ONE trabajo
persona.trabajo.descripcion
Persona HAS_MANY amigos
persona.amigos.count
espero se entienda
Saludos
Hernán
muchas gracias por la explicación, muy agradecido.
Un saludo.