在安装gem之后(gem' rolify'),我使用以下命令生成了该文件,
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
请任何人帮助我..
提前致谢。
答案 0 :(得分:23)
这是rolify
的已知错误;在没有.rb
扩展名的情况下创建迁移,因此rake db:migrate
无法提取。
手动重命名您的迁移以添加.rb扩展名。变化:
db/migrate/20140425070708_rolify_create_roles
是:
db/migrate/20140425070708_rolify_create_roles.rb
再次rake db:migrate
。
答案 1 :(得分: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命令之前在User模型中注释掉我的Devise行来修复它。
class User < ActiveRecord::Base
...
# devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
...
end
成功迁移后,我取消了设计线的注释,从那时起一切似乎都运行正常。