Je souhaite modéliser la relation d'une personne avec une autre personne, où la relation n'est pas nécessairement hiérarchique (ie amis & collègues, plutôt que parent & enfants) et je suis intéressé à saisir plus de détails sur chaque relation (par exemple, les notes, le type de relation, la date d'établissement). Enfin, j'aimerais utiliser la relation act_as_tree pour pouvoir naviguer/schématiser ces relations.Modéliser une relation de personne à personne dans Ruby-on-Rails en utilisant has_many: à travers
Les migrations:
class CreateProfiles < ActiveRecord::Migration def self.up
create_table :profiles do |table|
table.column :firstName, :string
table.column :lastName, :string
table.column :telephone, :string
table.column :emailAddress, :string
table.column :location, :string
table.timestamps
end end def self.down
drop_table :profiles end end
class Relationship < ActiveRecord::Migration def self.up
create_table :relationships, :id => false do |table|
table.column my_id :integer
table.column your_id :integer
table.column relationshipType :string
table.column dateEstablished :date
table.column notes :text
table.timestamps end end def self.down
drop_table :relationships end end
Les modèles:
class Person < ActiveRecord::Base
has_many :relationships, :foreign_key => "my_id"
has_many :persons :through => :relationships
end
class Relationship < ActiveRecord::Base
belongs_to :persons
acts_as_tree
end
Questions:
- Comment définir les relations entre ces tables correctement?
- Comme la combinaison my_id/your_id est unique, est-il sensé d'éliminer le: id de la table des relations?
- Y a-t-il de meilleurs noms pour les champs 'your_id' de my_id 'my_id' pour utiliser les conventions de RoR?
- Aurai-je des difficultés avec la relation act_as_tree si l'une des colonnes n'est pas nommée 'parent_id'?
La manière la plus simple de gérer la relation réciproque pourrait être de créer les deux directions en même temps. Il double la taille de la base de données, mais au moins les listes sont disponibles. – Eric