2010-05-10 4 views
1

Je suis en train de modéliser une publication. Une publication peut avoir plusieurs auteurs et éditeurs. Comme il est possible qu'une personne est un auteur d'une publication et rédacteur en chef d'un autre, pas de modèles distincts pour les auteurs et éditeurs:habtm plusieurs fois avec le même modèle

class Publication < ActiveRecord::Base 
    has_and_belongs_to_many :authors, :class_name=>'Person' 
    has_and_belongs_to_many :editors, :class_name=>'Person' 
end 

Le code ci-dessus ne fonctionne pas, car il utilise la même table de jointure. Maintenant, je maintenant que je peux préciser le nom de la table de jointure, mais il y a une mise en garde dans la documentation de l'API est un avertissement à ce sujet que je ne comprends pas:

: join_table: Indiquez le nom du joindre la table si la valeur par défaut basée sur l'ordre lexical n'est pas ce que vous voulez. AVERTISSEMENT: Si vous remplacez le nom de la table de l'une ou l'autre classe, la méthode table_name DOIT être déclarée sous n'importe quelle has_and_belongs_to_many déclaration dans pour pouvoir travailler.

Répondre

1

Cela signifie que si la publication de la classe est liée à une table sans nom standard, par exemple « my_publications »:

class Publication < ActiveRecord::Base 
    set_table_name "my_publication" 
end 

Le nom de la table de jeu devrait être mis derrière la déclaration HABTM pour que cela fonctionne:

class Publication < ActiveRecord::Base 
    has_and_belongs_to_many :authors, :class_name=>'Person' 
    has_and_belongs_to_many :editors, :class_name=>'Person' 
    set_table_name "my_publication" 
end 
1

Je considérerais généralement ceci comme un cas où vous voulez utiliser has_many: through.

+0

http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off –

Questions connexes