2012-04-02 10 views
0

との3モデル関係私は、これらの3つのモデルを得ま​​した。生物は多くの配列を持つことができます。これまでのところ、正常に動作します。私は1つの生物とプロジェクトへの生体関連配列のいずれかを選択する必要がレールhas_and_belongs_to_manyアソシエーション

私は苦労しています問題は、私のプロジェクトモデルの団体です。しかし、生物は多くのプロジェクトを持つことができます。

私は以下の指示に従っていました:has_and_belongs_to_many-associations-in-ruby-on-rails。しかし、フォームデータを保存しようとすると失敗します。コンソールに「ビルド」しようとすると、失敗することさえあります。

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> 

私がやっていることは何ですか?

多分私はここで間違った経路をたどっています。データベース設計にはあまり良くないので、私は明らかにいくつかの助けが必要です。私はproject.organismとproject.sequenceだけでなく、sequence.organismとoriganism.sequencesのようなものを持っていたいと思います。ご覧のとおり、3つのモデルは互いに密接に接続されています。その背景には、レーキタスクが生物のリストを更新し、関連する配列がNCBIデータベースを規則的に形成するということです。したがって、私はちょうどプロジェクトモデルのデータを "保存"できません、私は他のテーブルにそれらをリンクする必要があります。

EDITは:私のプロジェクトのモデルは次のようになります。

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

注:私はまだ見当がつかない、プロジェクトへのシーケンスが利用できるようにする方法。

と移行:私は私はそれを解決したと思う

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 

は、あなたに エイドリアン

EDIT 2を4人のあなたの助けに感謝します。私はちょうどそれについて再考し、これは、よりシンプルなソリューションです:

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 

これに伴う問題は、私がしようsequence.projects

+0

プロジェクトには、生物と呼ばれるフィールドやメソッドがありません。プロジェクトモデルのコードを表示してください:) – willcodejavaforfood

+0

*更新*モデルとの私の投稿。 – adrian

答えて

0

ようなプロジェクトへの配列から戻ってカントということだけである

project.organisms.build 

代わり

project.organism.build 

のあなたはすべての後に関連生物と呼ばれるでした:)

+0

*更新2 * - どうにかして解決されました。ありがとうございました :) – adrian

関連する問題