198 votes

Ce qui ' la différence entre belongs_to et has_one ?

Quelle est la différence entre un et un ?

Le rubis sur le guide de Rails de lecture n’a pas m’aidé.

310voto

ryeguy Points 24980

Ils font essentiellement la même chose, la seule différence est de quel côté de la relation. Si un User a Profile, puis dans l' User classe que vous auriez has_one :profile et de la Profile classe que vous auriez belongs_to :user. Pour déterminer le "a" de l'autre objet, regarde d'où la clé étrangère est. On peut dire qu'un User "a" Profile parce que l' profiles tableau a un user_id colonne. Si il y avait une colonne appelée profile_id sur le users tableau, cependant, nous dirions que l' Profile a User, et le belongs_to/has_one emplacements seraient inversés.

ici est une explication plus détaillée.

88voto

Il est de savoir où la clé étrangère est assis.

la classe Foo < AR:Base fin

si foo belongs_to :bar, puis la table de foos a un bar_id colonne si foo has_one :bar,puis les barres de la table a une colonne foo_id

Sur le plan conceptuel, si votre classe a a Un has_one relation avec la classe B classe A est le parent de la classe B donc votre classe B aura un belongs_to relation avec la classe A, car il est l'enfant de la classe A.

Les deux expriment une relation 1-1. La différence est surtout l'endroit où placer la clé étrangère, qui va sur la table pour la classe de déclarer la belongs_to relation.

class User < ActiveRecord::Base # Je référence un compte. belongs_to :compte fin

Compte de la catégorie < ActiveRecord::Base # Un utilisateur références de moi. has_one :utilisateur fin

Les tables pour ces classes pourrait ressembler à quelque chose comme:

CRÉER une TABLE des utilisateurs ( id int(11) not NULL auto_increment, account_id int(11) default NULL, nom varchar par défaut NULL, PRIMARY KEY (id) )

CRÉER une TABLE des comptes ( id int(11) not NULL auto_increment, nom varchar par défaut NULL, PRIMARY KEY (id) )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X