Bonjour,
Je me pose une question sur la façon de faire quand dans une table
vous avez plusieurs clé étrangères qui doivent pointer sur la même
table. Exemple :
- un objet pays
- un objet personne
Dans l’objet personne vous avez les infos nationalité, et pays de
résidence. les 2 pointent sur la table pays. Comment faites vous
puisque la convention veut que la clé s’appelle pays_id mais vous ne
pouvez avoir 2 champs pays_id je me disais donc qu’on peux avoir
- un premier champs pays_id pour lequel on indique la relation
has_one :pays (utilisant la convention de nommage)
- un deuxième appelé par exemple pays_res_id pour lequel on sépcifie
la relation has_one :pays_res, class_name=> “Pays”, foreign_key=>
“pays_res_id”
et pour l’objet pays on aurait les relations belongs_to réciproques
Est ce une bonne façon de faire?
A partir du moment où ton objet peut “appartenir” à plusieurs autres
objets, on va plutôt utiliser le mécanisme de polymorphisme intégré à
Rails. Voir le paragraphe “Polymorphic Associations” de
++
yk
Le 22/10/07, Tranquiliste[email protected] a écrit :
Nicolas :
has_one :pays (utilisant la convention de nommage)
- un deuxième appelé par exemple pays_res_id pour lequel on sépcifie
la relation has_one :pays_res, class_name=> “Pays”, foreign_key=>
“pays_res_id”
et pour l’objet pays on aurait les relations belongs_to réciproques
Ouais, tu y es presque.
Rapidement, ça doit donner ça :
class Pays < AR::B
has_many :personnes
has_many :residents, :class_name => ‘Personne’, :foreign_key =>
‘pays_residence_id’
end
class Personne < AR::B
belongs_to :pays # pays_de_naissance est plus clair
belongs_to :pays_de_residence,
:class_name => ‘Pays’,
:foreign_key => ‘pays_residence_id’
end
attention aux singulier/pluriel avec pays.
– Jean-François
–
Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)
Merci, effectivement j’ai inversé les has et belongs
Nicolas