Rolify表没有被创建

12
安装了'rolify' gem后,使用以下命令生成文件:
rails g rolify Role User

以下文件已被创建:

invoke  active_record
create    app/models/role.rb
invoke    rspec
create      spec/models/role_spec.rb
invoke      factory_girl
create        spec/factories/roles.rb
insert    app/models/role.rb
create    db/migrate/20140425070708_rolify_create_roles
insert  app/models/user.rb
create  config/initializers/rolify.rb

然后,我给了。
rake db:migrate

它给我警告,

[WARN] table 'Role' doesn't exist. Did you run the migration ? Ignoring rolify config.

此外,表格没有被创建。我错过了什么问题吗? 这是我的迁移文件:
 class RolifyCreateRoles < ActiveRecord::Migration
    def change
     create_table(:roles) do |t|
      t.string :name
      t.references :resource, :polymorphic => true
      t.timestamps
     end

    create_table(:users_roles, :id => false) do |t|
      t.references :user
      t.references :role
    end

    add_index(:roles, :name)
    add_index(:roles, [ :name, :resource_type, :resource_id ])
    add_index(:users_roles, [ :user_id, :role_id ])
  end
 end

我的版本信息:

Rails - 4.1.0 Ruby - 2.1.1

请有人帮助我解决这个问题。

提前致谢。


嗯,你尝试过重置数据库并从头运行所有迁移吗? - roman-roman
2个回答

23

这是一个已知的 rolify bug;迁移时没有添加 .rb 扩展名,所以 rake db:migrate 没有识别到它。

请手动将您的迁移文件重命名并添加 .rb 扩展名。更改为:

db/migrate/20140425070708_rolify_create_roles

成为:

db/migrate/20140425070708_rolify_create_roles.rb

然后再次运行rake db:migrate


1
谢谢你的回答,Graeme。我真的没有注意到那个.rb文件。很有帮助 :) - Abhiram
6
在使用Ruby 2.2和Rails 4.2进行rake db:migrate操作时,我遇到了相同的错误信息。迁移文件具有.rb扩展名且表已创建,但为了消除错误信息,只需键入:rake db:test:prepare,然后再键入rake db:test:load即可。 - OskarH

1

我在使用Rails 5.2.5、Rolify 5.0.0和Devise 3.5.3时遇到了同样的问题。

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'papi_development.roles' doesn't exist: SELECT `roles`.* FROM `roles`

在运行rake db:migrate命令之前,我通过注释用户模型中的Devise行来解决了这个问题。

class User < ActiveRecord::Base
  ...
  # devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  ...
end

成功迁移后,我取消了devise行的注释,从那时起一切都运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接