No, no son intercambiables, y hay algunas diferencias reales.
belongs_to
significa que la clave externa está en la tabla para esta clase. Por lo tanto, belongs_to
SÓLO puede entrar en la clase que contiene la clave externa.
has_one
significa que hay una clave externa en otra tabla que hace referencia a esta clase. Entonces, has_one
SOLAMENTE puede entrar en una clase a la que hace referencia una columna en otra tabla.
Así que esto es falso:
class Person < ActiveRecord::Base
has_one :cell # the cell table has a person_id
end
class Cell < ActiveRecord::Base
has_one :person # the person table has a cell_id
end
Así es la siguiente:
class Person < ActiveRecord::Base
belongs_to :cell # the person table has a cell_id
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
Para una asociación de dos vías, es necesario uno de cada uno, y tienen que ir en la clase correcta. Incluso para una asociación unidireccional, importa cuál uses.
one good [blog aquí] (http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/) ¡por lo mismo! –
El código anterior es incorrecto, debe ser 'has_one: cell' y' belongs_to: person' no debe ** no ** ser un espacio entre los dos puntos y la siguiente palabra. – Josh