2008-11-03 3 views
0

J'ai des tables qui ont une relation de plusieurs à plusieurs. J'ai créé la table correcte codesecure_project_tst_definition et cela fonctionne. Je peux joindre des lignes en appelant la méthode codesecure_projects < < sur un objet TstDefinition. Le problème est que, pour une raison quelconque, l'enregistrement actif veut utiliser Codesecure_project_id comme valeur d'identifiant pour la table codesecure_project_tst_definition. Qu'est-ce que je fais mal? Comment puis-je résoudre ce problème de sorte que lorsque j'appelle la méthode codesecure_projects < <, il n'essaie pas de définir l'ID de la table codesecure_project_tst_definition?Activerecode HABTM problème de clé primaire

J'ai posté les migrations ci-dessous

class CreateCodesecureProjects < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects do |t| 
     t.string :name 
     t.string :lang 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects 
    end 
end 


class CreateTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :tst_definitions do |t| 
     t.string :test_name 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :tst_definitions 
    end 
end 


class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects_tst_definitions do |t| 
     t.references :codesecure_project 
     t.references :tst_definition 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects_tst_definitions 
    end 
end 

Les parties pertinentes des modèles:

class TstDefinition < ActiveRecord::Base 
    has_and_belongs_to_many :codesecure_projects 
    has_many :tst_datas 

class CodesecureProject < ActiveRecord::Base 
    has_many :input_abstractions 
    has_and_belongs_to_many :tst_definitions 
+0

Pouvez-vous nous montrer les définitions de classe avec les lignes d'association dans? – Gareth

+0

Je ne pouvais pas comprendre le problème .. Post tableaux Schéma .. comme Gareth a dit .. poster les classes de modèle AR pourrait aider – Gishu

Répondre

4

Après quelques recherches, j'ai trouvé la réponse, grâce à ce blog http://jimcortez.com/blog/?p=9. Je devais simplement supprimer la colonne id de la table codesecure_projects_tst_definitions. La migration ressemble donc à ceci:

class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration 
    def self.up 
    create_table :codesecure_projects_tst_definitions, :id => false do |t| 
     t.references :codesecure_project 
     t.references :tst_definition 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :codesecure_projects_tst_definitions 
    end 
end 
+0

Je ne faisais que taper ce lol. Vous devriez également envisager d'utiliser une association 'has_many: through' qui fait de la table de jointure un modèle de jointure réel. Cela a été ajouté il y a 2 ans [http://weblog.rubyonrails.org/2006/04/21/habtm-vs-has_many-through/] mais il y a probablement d'autres références plus complètes autour de – Gareth

Questions connexes