为什么HABTM会生成包含“id”列的查询?

时间:2010-10-13 18:10:00

标签: ruby-on-rails has-and-belongs-to-many

我有一个角色模型和权限模型。

角色模型:

 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值的行?

1 个答案:

答案 0 :(得分:0)

想出来。我在后端使用Microsoft SQL。这是使用Microsoft SQL的许多细微差别之一。

问题是我有一个表“dbo.permissions_roles”,其中包含了之前实验中的id字段。实际上有数据的表是“rails_sa.permissions_roles”,它不包含id(rails_sa是我的架构的名称和连接的用户)。

由于某些原因,我仍无法解释,模型背后的数据存储在rails_sa.permissions_roles中。但是,连接表定义来自dbo.permissions_roles。我确信这个边缘案例有一个合理的解释。