Quelle est la différence entre un et un
?
Le rubis sur le guide de Rails de lecture n’a pas m’aidé.
Quelle est la différence entre un et un
?
Le rubis sur le guide de Rails de lecture n’a pas m’aidé.
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.
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 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.