索引未创建

时间:2014-04-06 20:13:24

标签: ruby-on-rails postgresql migration

我正在尝试在我的引擎中创建一个user_roles表,该表将特定角色加入用户,允许该用户拥有一个或多个角色。

我有以下迁移:

用户

- 此迁移工作正常。

class CreateXaaronUsers < ActiveRecord::Migration
  def change
    create_table :xaaron_users do |t|
      t.string :first_name
      t.string :last_name
      t.string :user_name
      t.string :email
      t.string :password
      t.string :salt

      t.timestamps
    end
  end
end

角色

- 此迁移正常

class Roles < ActiveRecord::Migration
  def change
    create_table :xaaron_roles do |t|
      t.string :role
      t.timestamps
    end
  end
end

user_roles

- 此迁移爆炸声明列user_id不存在。我假设这个迁移,处理索引等等,会创建适当的列,引用我要它引用的内容。

class UserRolesJoin < ActiveRecord::Migration
  def change
    create_table :xaaron_user_roles, id: false do |t|
      t.references :xaaron_user, null: false
      t.references :xaaron_role, null: false
    end

    add_index :xaaron_user_roles, :user_id
    add_index :xaaron_user_roles, [:role_id, :user_id], unique: true
    add_index :xarron_roles, :role, unique: true
  end
end

确切的错误是:

 PG::UndefinedColumn: ERROR:  column "user_id" does not exist
: CREATE  INDEX  "index_xaaron_user_roles_on_user_id" ON "xaaron_user_roles"  ("user_id")/Users/Adam/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `async_exec'
/Users/Adam/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `block in execute''

我输入的内容是否失败?为什么这种迁移失败了,除了显而易见的?

1 个答案:

答案 0 :(得分:1)

如果您只想创建连接表,那么

<强> 1。删除现有迁移

  

rails d migration UserRolesJoin

<强> 2。为联接表创建新的迁移

  

rails g migration CreateJoinTableUserRole用户角色

这将创建一个类似的迁移:

class CreateJoinTableUserRole < ActiveRecord::Migration
  def change
    create_join_table :users, :roles do |t|
      # t.index [:user_id, :role_id]
      # t.index [:role_id, :user_id]
    end
  end
end

注意:您需要根据生成的迁移中的要求取消注释其中一个组合。

第3。运行rake db:migrate