Ruby on rails 为什么HABTM会生成包含“id”列的查询?
我有一个角色模型和权限模型 榜样:Ruby on rails 为什么HABTM会生成包含“id”列的查询?,ruby-on-rails,has-and-belongs-to-many,Ruby On Rails,Has And Belongs To Many,我有一个角色模型和权限模型 榜样: has_and_belongs_to_many :permissions 权限模型: has_and_belongs_to_many :roles 迁移以创建权限\u角色表: class CreatePermissionsRoles < ActiveRecord::Migration def self.up create_table :permissions_roles, :id => false do |t| t.i
has_and_belongs_to_many :permissions
权限模型:
has_and_belongs_to_many :roles
迁移以创建权限\u角色表:
class CreatePermissionsRoles < ActiveRecord::Migration
def self.up
create_table :permissions_roles, :id => false do |t|
t.integer :permission_id
t.integer :role_id
end
end
def self.down
drop_table :permissions_roles
end
end
它究竟为什么要添加一个id值的行 找到了答案。我在后端使用Microsoft SQL。这是使用Microsoft SQL的许多细微差别之一 问题是我有一个表dbo.permissions\u roles,其中包含了先前实验中的id字段。实际包含数据的表是rails_sa。不包含id的permissions_角色rails_sa是连接的模式和用户的名称
出于某种我仍然无法解释的原因,模型背后的数据被存储在rails_sa.permissions_角色中。但是,联接表定义来自dbo.u角色。我相信对这种边缘情况有一个合理的解释。您是否曾经使用ID列创建过此表,然后在使用此迁移之前忘记将其吹走?忘记重新启动服务器了吗?或者这是在测试环境中,您忘记运行rake db:test:prepare了?该行为看起来很愚蠢,因此下一步将发布更多触发错误的代码和一些日志。请参阅下面的答案。微软SQL模式和我之前的实验把它搞砸了。
INSERT INTO "permissions_roles" ("permission_id", "role_id", "id") VALUES (1, 1, 1)