使用has_many时未初始化的常量NameError

时间:2014-08-29 19:03:02

标签: ruby-on-rails ruby activerecord associations

我练习我的RoR技能并尝试将应用程序开发到已创建的数据库。它有4个表: testplans testplan_tcversions ,* test_project *和节点

我为这个表编码了2个模型:

 class TestPlan < ActiveRecord::Base
  self.table_name= 'testplans'

  belongs_to :test_project

  has_many :test_suites, foreign_key: :testplan_id, inverse_of: :test_plan

  has_one :node, foreign_key: :id, inverse_of: :test_plan
end

class TestSuite < ActiveRecord::Base
  self.table_name='testplan_tcversions'
  belongs_to :test_plan

  has_one :node, foreign_key: id, inverse_of: :test_collection
end

但是在尝试时我得到异常未初始化的常量TestPlan :: TestSuite:@suits=TestPlan.find(4906).test_suites

我发现很多答案,模型必须是单数,表必须是复数,但我的模型名称是单数,表格的名称我指向self.table_name。

我做错了什么?

UPD

这是我的db:schema:dump

create_table "testplans", force: true do |t|
    t.integer "testproject_id"
    t.text    "notes"
    t.integer "active"
    t.integer "is_open"
    t.integer "is_public"
    t.text    "api_key"
  end

 create_table "testplan_tcversions", force: true do |t|
    t.integer  "testplan_id"
    t.integer  "tcversion_id"
    t.integer  "node_order"
    t.integer  "urgency"
    t.integer  "platform_id"
    t.integer  "author_id"
    t.datetime "creation_ts"
  end

1 个答案:

答案 0 :(得分:0)

您的迁移是如何设置的?

如果设置正确,TestSuite和TestPlan之间的关系应如下所示:

class TestPlan < ActiveRecord::Base
  has_many :test_suites
end

class TestSuite < ActiveRecord::Base
  belongs_to :test_plan
end

为此,您的TestSuite迁移需要有一个test_plan_id列。这应该是这样的。

class TestSuite < ActiveRecord::Migration
  belongs_to :test_plan
end

如果设置正确,您应该可以拨打@suits=TestPlan.find(4906).test_suites

确保您的表名与您的型号名称相对应。如果您没有名为“testplan_tcversions”的表,则该关联将不起作用。