rails 3与has_and_belongs_to_many的模型关系

时间:2012-04-02 11:42:02

标签: ruby-on-rails-3 database-design

我有三个模型:

项目,生物和序列

每个序列都是独特的,属于有机体。有机体可以有许多序列。到目前为止,它运作良好。

我正在努力解决的问题是我的项目模型中的关联:

我需要选择一个生物体和一个生物体相关序列的项目。但是,有机体可以有很多项目。

我遵循了这些说明: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。你看,这三个模型彼此紧密相连。背景是,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 :(得分:0)

project.organisms.build

而不是

project.organism.build

你毕竟打电话给关联生物:)