Question

Je voudrais modèle à une autre personne, où la relation est pas nécessairement hiérarchique de la relation d'une personne (c.-à-amis et collègues, plutôt que parents et enfants) et je suis intéressé à capturer plus de détails sur chaque relation (par exemple, des notes, type de relation, date de création). Enfin, je voudrais utiliser la relation de act_as_tree pour pouvoir naviguer / diagramme de ces relations.

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:

  1. Comment définir les relations entre ces tables correctement?
  2. Comme le mon_id / VOTRE_ID combinaison est unique, est-il logique d'éliminer l':? Id sur la table des relations
  3. Y at-il de meilleurs noms pour les champs « mon_id » et « votre_ID » pour faire usage des conventions de RoR?
  4. Vais-je avoir des difficultés avec la relation act_as_tree si l'une des colonnes est le nom pas « parent_id »?
Était-ce utile?

La solution

  1. Il y a tout juste quelques jours, on a posé une question similaire: « beaucoup à plusieurs avec le même modèle dans des rails? » . J'ai essayé de documenter longuement comment faire il y a des associations bouclées. Peut-être cela vous aidera dans?

  2. Les tables sans ID dans Rails ne sont jamais vu avec une association de has_and_belongs_to_many. Avec les associations has_many :through régulières, le modèle de la table de jointure est comme tout autre modèle ActiveRecord, et nécessite une colonne ID

  3. Je ne suis pas au courant d'une bonne convention, mais ces exemples sont un peu étranges. Vous seriez les relationship.your comme accédez, ce qui me semble un peu maladroit personnellement. Peut-être your_person_id, qui serait accessible par relationship.your_person, et préciser que vous avez affaire à une instance de Person? Une autre option pourrait être relationship.you.

  4. Je ne l'ai jamais utilisé acts_as_tree, mais vous pouvez l'appeler avec un paramètre comme ceci: acts_as_tree :foreign_key => 'my_id'

Comme je l'ai mentionné dans ma réponse à la autre question , il semble que votre plus grande difficulté sera les relations bi-directionnelles. Une fois qu'une personne A est connecté à une personne B, il ne laisse entendre que la personne B est connecté à personne A. C'est malheureusement difficile à accomplir dans ActiveRecord, de ce que je peux dire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top