我正在尝试在我的引擎中创建一个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''
我输入的内容是否失败?为什么这种迁移失败了,除了显而易见的?
答案 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