我必须拥有多对多关系的表格。我已经创建了正确的表codesecure_project_tst_definition,它可以工作。我可以通过调用codesecure_projects<<来将行连接在一起TstDefinition对象上的方法。问题是由于某种原因,活动记录想要使用Codesecure_project_id作为codesecure_project_tst_definition表的id值。我究竟做错了什么?我如何修复它,以便在我调用codesecure_projects<<方法它不会尝试设置codesecure_project_tst_definition表的id?
我已在下面发布了迁移
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
答案 0 :(得分:4)
经过一些搜索,我实际上找到了答案,感谢这篇博文http://jimcortez.com/blog/?p=9。我只需要从codesecure_projects_tst_definitions表中删除id列。所以迁移现在看起来像这样:
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