Я получил эти три модели:
Проекты, организмы и последовательности
Каждая последовательность уникальна и принадлежит организму. Организм может иметь много последовательностей. Пока все отлично работает.
Проблема, с которой я борюсь, - это связь в модели моих проектов:
Мне нужно выбрать один организм и одну из последовательностей, связанных с организмом, для проекта. Но у организма может быть много проектов.
Я следовал этим инструкциям: has_and_belongs_to_many-association-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.sequence. Видите ли, три модели тесно связаны друг с другом. Предпосылкой является то, что задача rake обновит список организмов и связанных с ними последовательностей, регулярно образующих базу данных NCBI. Поэтому я не могу просто «сохранить» данные в модели проектов, я должен связать их с другими таблицами.
РЕДАКТИРОВАТЬ: моя модель проекта выглядит следующим образом:
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
спасибо вам за помощь,
Адриан
РЕДАКТИРОВАТЬ 2:
я думаю я решил это. Я просто переосмыслил это, и это более простое решение:
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