Non, ils ne sont pas interchangeables, et il y a de vraies différences.
belongs_to
signifie que la clé étrangère dans la table pour cette classe. Donc, belongs_to
ne peut aller que dans la classe qui contient la clé étrangère.
has_one
signifie qu'il y a une clé étrangère dans une autre table qui fait référence à cette classe. Donc, has_one
ne peut aller que dans une classe qui est référencé par une colonne d'une autre table.
Donc, c'est faux:
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
Alors, est-ce:
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
Pour les deux sens de l'association, il vous en faut un de chaque, et ils ont à aller dans la bonne classe. Même pour une association, il importe celui que vous utilisez.