Модель рельсов 3 связана с has_and_belongs_to_many - PullRequest
0 голосов
/ 02 апреля 2012

Я получил эти три модели:

Проекты, организмы и последовательности

Каждая последовательность уникальна и принадлежит организму. Организм может иметь много последовательностей. Пока все отлично работает.

Проблема, с которой я борюсь, - это связь в модели моих проектов:

Мне нужно выбрать один организм и одну из последовательностей, связанных с организмом, для проекта. Но у организма может быть много проектов.

Я следовал этим инструкциям: 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

1 Ответ

0 голосов
/ 02 апреля 2012

1001 * попробовать *

project.organisms.build

вместо

project.organism.build

Вы ведь называли ассоциативные организмы в конце концов:)

...