J'ai deux tables avec une relation plusieurs à plusieurs que j'utilise has_and_belongs_to_many pour définir l'association.Créer une table de jointure sans clé primaire
class Foo < ActiveRecord::Base
...
has_and_belongs_to_many :bar
...
end
class Bar < ActiveRecord::Base
...
has_and_belongs_to_many :foo
...
end
J'ai aussi la classe définie pour représenter la table de jointure
class BarFoo < ActiveRecord::Base
...
belongs_to :foo
belongs_to :bar
...
end
Quand je lance rake db: graines, j'obtiens l'erreur suivante:
Primary key is not allowed in a has_and_belongs_to_many join table (bar_foo)
Si je modifie la base de données et supprimez le champ de clé primaire (ID) de la table bar_foo, puis réexécutez rake db: seed tout fonctionne comme vous le souhaitez.
Compte tenu de ce qui précède, quel est le moyen préféré de créer des tables jointes dans des rails sans clé primaire? J'ai également essayé d'utiliser "has_many: bars,: through =>: foo" et vice versa mais j'ai reçu un message d'erreur quelque chose comme "méthode non définie 'klass' pour nil: NilClass".
Matt, merci pour la réponse. Je suis relativement nouveau à RoR alors quel est le moyen préféré de créer une table sans fichiers de modèles correspondants? Est-ce que cela serait fait en générant un fichier de migration et en utilisant create_table pour définir la table avec les deux attributs bar_id et foo_id? – Keith
Voici une bonne réponse: [Dois-je créer manuellement une migration pour une table de jointure HABTM?] (Http://stackoverflow.com/questions/564306/do-i-need-to-manually-create -a-migration-pour-habtm-join-table) – Matt