Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么HABTM会生成包含“id”列的查询?_Ruby On Rails_Has And Belongs To Many - Fatal编程技术网

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)