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
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
* mis à jour * mon poste avec le modèle. – adrian