У меня есть таблицы, которые имеют отношение "многие ко многим". Я создал правильную таблицу codesecure_project_tst_definition, и она работает. Я могу объединять строки, вызывая метод codesecure_projects << объекта TstDefinition. Проблема в том, что по какой-то причине активная запись хочет использовать Codesecure_project_id в качестве значения идентификатора для таблицы codesecure_project_tst_definition. Что я делаю не так? Как мне исправить это, чтобы при вызове метода codesecure_projects << он не пытался установить идентификатор таблицы codesecure_project_tst_definition?
Я разместил миграции ниже
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
Я не мог понять проблему ... схема размещения таблиц ... как сказал Гарет ... размещение классов модели AR может помочь





После некоторого поиска я действительно нашел ответ благодаря этому сообщению в блоге 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
Я просто набирал это, лол. Вам также следует рассмотреть возможность использования ассоциации has_many :through, которая превращает таблицу соединений в реальную модель соединения. Это было добавлено 2 года назад [weblog.rubyonrails.org/2006/04/21/habtm-vs-has_many-through /], но, вероятно, есть еще несколько подробных ссылок вокруг
Не могли бы вы показать нам определения классов с соответствующими линиями?