No, non sono intercambiabili e ci sono alcune differenze reali.
belongs_to
significa che la chiave esterna è nella tabella per questa classe. Quindi belongs_to
può andare SOLO nella classe che contiene la chiave esterna.
has_one
significa che è presente una chiave esterna in un'altra tabella che fa riferimento a questa classe. Quindi has_one
può andare SOLO in una classe a cui fa riferimento una colonna in un'altra tabella.
Quindi questo è sbagliato:
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
Quindi è questo:
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
Per un'associazione a due vie, è necessario uno di ciascuno, e devono andare nella classe giusta. Anche per un'associazione a senso unico, è importante quale si usa.
fonte
2009-05-14 06:51:14
un buon [blog qui] (http://requiremind.com/differenze-tra-solo-e-in-unione-per-in-ruby-on-rails/) per lo stesso! –
Il codice sopra non è corretto, dovrebbe essere 'has_one: cell' e' belongs_to: person' dovrebbe ** non ** essere uno spazio tra i due punti e la seguente parola. – Josh