Forum: Rails-ES relacion 1 a 1 entre dos tablas

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
94ac01209314464490a94b47f051be0b?d=identicon&s=25 alarkspur (Guest)
on 2007-03-03 21:38
(Received via mailing list)
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 :p
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.
Afe765ee2d37bd6ad7e55d6f5fd35f1e?d=identicon&s=25 Hernan Fernandez (Guest)
on 2007-03-05 00:37
(Received via mailing list)
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
94ac01209314464490a94b47f051be0b?d=identicon&s=25 alarkspur (Guest)
on 2007-03-05 21:21
(Received via mailing list)
muchas gracias por la explicación, muy agradecido.

Un saludo.
This topic is locked and can not be replied to.