2014-08-29 4 views
0

Я практикую свои навыки RoR и пытаюсь разработать приложение к уже созданной БД. Он имеет 4 таблицы: testplans, testplan_tcversions, * test_project * и узлы.неинициализированная константа NameError при использовании has_many

Я код 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

Это моя дб: схема: дамп

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 

ответ

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», ассоциация не будет работать.

+0

Я использую уже созданную БД и не писал миграцию, потому что у БД есть все таблицы с полями и данными. TestSuite has'n _test_plan_id_, но _testplan_id_, и я указываю его на 'foreign_key:: testplan_id'. Названия таблиц не соответствуют имени модели, и я использую 'self.table_name =' –

Смежные вопросы