clés étrangères sur la même table

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