我有一个角色模型和权限模型。
角色模型:
has_and_belongs_to_many :permissions
许可模式:
has_and_belongs_to_many :roles
创建permissions_roles表的迁移:
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'。”进一步检查发现尝试执行的查询是:
INSERT INTO "permissions_roles" ("permission_id", "role_id", "id") VALUES (1, 1, 1)
为什么世界上是否尝试添加具有id值的行?
答案 0 :(得分:0)
想出来。我在后端使用Microsoft SQL。这是使用Microsoft SQL的许多细微差别之一。
问题是我有一个表“dbo.permissions_roles”,其中包含了之前实验中的id字段。实际上有数据的表是“rails_sa.permissions_roles”,它不包含id(rails_sa是我的架构的名称和连接的用户)。
由于某些原因,我仍无法解释,模型背后的数据存储在rails_sa.permissions_roles中。但是,连接表定义来自dbo.permissions_roles。我确信这个边缘案例有一个合理的解释。