2012-04-02 4 views
0

je suis arrivé ces trois modèles:rails 3 relation modèle avec has_and_belongs_to_many

projets, des organismes et des séquences

Chaque séquence est unique et appartient à un organisme. Un organisme peut avoir plusieurs séquences. Jusqu'à présent, cela fonctionne bien.

Le problème que je me bats avec l'association est dans mon modèle de projets:

Je dois sélectionner un organisme et l'un des aux séquences associées à l'organisme au projet. Mais aussi, un organisme peut avoir beaucoup de projets.

Je suivais ces instructions: has_and_belongs_to_many-associations-in-ruby-on-rails. Mais cela échoue, lorsque j'essaie d'enregistrer mes données de formulaire. Lorsque je tente de « construire » dans la console, il échoue même:

ree-1.8.7-2011.03 :001 > project = Project.new 

=> #<Project id: nil, name: nil, organism_id: nil, sequence_id: nil, created_at: nil, updated_at: nil> 

ree-1.8.7-2011.03 :002 > project.organism.build 

NoMethodError: undefined method `organism' for #<Project:0x56117c8> 

Quel est le problème avec ce que je fais?

Peut-être que je suis le mauvais chemin ici. im pas très bon dans la conception de base de données, donc j'ai besoin d'aide évidemment :) Ce que je voudrais avoir est quelque chose comme project.organism et project.sequence, ainsi que sequence.organism et origanism.sequences. Vous voyez, les trois modèles sont étroitement connectés les uns aux autres. L'arrière-plan est, qu'une tâche de rake mettra à jour la liste des organismes et les séquences associées à la base de données NCBI. Par conséquent, je ne peux pas "enregistrer" les données dans le modèle de projets, je dois les lier à d'autres tables.

EDIT: mon modèle de projet ressemble à ceci:

class Project < ActiveRecord::Base 
    has_and_belongs_to_many :organisms 
    #has_one :sequence 
end 

Note: Je ne sais toujours pas, comment faire la séquence à la disposition du projet.

et la migration:

class CreateProjects < ActiveRecord::Migration 
    def change 
    create_table :projects do |t| 

     t.string :name 

     t.integer :organism_id 
     t.integer :sequence_id 

     t.timestamps 
    end 
    end 
end 

vous remercie de votre aide quatre, Adrian

EDIT 2:

i pense je l'ai résolu. Je viens à ce sujet repensé, ce qui est la solution la plus simple:

class Project < ActiveRecord::Base 
    belongs_to :organism 
    belongs_to :sequence 
end 

class Sequence < ActiveRecord::Base 
    belongs_to :organism 
end 

class Organism < ActiveRecord::Base 
    has_many :projects 
    has_many :sequences 
end 

Le problème est seulement que je ne peux pas revenir en arrière à partir de séquences à des projets comme sequence.projects

+0

On dirait que le projet n'a pas de champ ou de méthode appelée organisme. Afficher le code pour le modèle de projet s'il vous plaît :) – willcodejavaforfood

+0

* mis à jour * mon poste avec le modèle. – adrian

Répondre

0

essayer

project.organisms.build 

au lieu de

project.organism.build 

Vous avez appelé les organismes d'association après tout :)

+0

* mise à jour 2 * - résolu en quelque sorte. Je vous remercie :) – adrian

Questions connexes