Nein, sie sind nicht austauschbar, und es gibt einige echte Unterschiede.
belongs_to
bedeutet, dass der Fremdschlüssel in der Tabelle für diese Klasse enthalten ist. So kann belongs_to
NUR in die Klasse gehen, die den Fremdschlüssel enthält.
has_one
bedeutet, dass in einer anderen Tabelle ein Fremdschlüssel vorhanden ist, der auf diese Klasse verweist. So kann NUR in eine Klasse gehen, die durch eine Spalte in einer anderen Tabelle referenziert wird.
Also das ist falsch:
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
Das ist also:
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
Für eine Zwei-Wege-Vereinigung, benötigen Sie einen von jedem, und sie haben in der richtigen Klasse zu gehen. Selbst für eine einseitige Verbindung ist es wichtig, welche Sie verwenden.
ein gutes [Blog hier] (http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/) für das gleiche! –
Der obige Code ist falsch, sollte 'has_one: cell' und' gehört_zu: person' da sollte ** not ** ein Leerzeichen zwischen dem Doppelpunkt und dem folgenden Wort sein. – Josh