Проблема первичного ключа Activerecode HABTM - PullRequest
0 голосов
/ 03 ноября 2008

У меня есть таблицы, которые имеют отношение ко многим. Я создал правильную таблицу codesecure_project_tst_definition, и она работает. Я могу объединить строки, вызвав метод codesecure_projects << для объекта TstDefinition. Проблема в том, что по какой-то причине активная запись хочет использовать Codesecure_project_id в качестве значения идентификатора для таблицы codesecure_project_tst_definition. Что я делаю неправильно? Как это исправить, чтобы при вызове метода codesecure_projects << он не пытался установить идентификатор таблицы codesecure_project_tst_definition? </p>

Я разместил миграции ниже

class CreateCodesecureProjects < ActiveRecord::Migration
  def self.up
    create_table :codesecure_projects do |t|
      t.string :name
      t.string :lang

      t.timestamps
    end
  end

  def self.down
    drop_table :codesecure_projects
  end
end


class CreateTstDefinitions < ActiveRecord::Migration
  def self.up
    create_table :tst_definitions do |t|
      t.string :test_name

      t.timestamps
    end
  end

  def self.down
    drop_table :tst_definitions
  end
end


class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration
  def self.up
    create_table :codesecure_projects_tst_definitions do |t|
      t.references :codesecure_project
      t.references :tst_definition

      t.timestamps
    end
  end

  def self.down
    drop_table :codesecure_projects_tst_definitions
  end
end

Соответствующие части моделей:

class TstDefinition < ActiveRecord::Base
  has_and_belongs_to_many :codesecure_projects
  has_many :tst_datas 

class CodesecureProject < ActiveRecord::Base
  has_many :input_abstractions
  has_and_belongs_to_many :tst_definitions

1 Ответ

4 голосов
/ 03 ноября 2008

После некоторых поисков я действительно нашел ответ, благодаря этому сообщению в блоге http://jimcortez.com/blog/?p=9. Мне просто нужно было удалить столбец id из таблицы codesecure_projects_tst_definitions. Таким образом, миграция теперь выглядит так:

class CreateCodesecureProjectsTstDefinitions < ActiveRecord::Migration
  def self.up
    create_table :codesecure_projects_tst_definitions, :id => false do |t|
      t.references :codesecure_project
      t.references :tst_definition

      t.timestamps
    end
  end

  def self.down
    drop_table :codesecure_projects_tst_definitions
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...