我正在使用Devise和Rolify开发Rails 3.2.13应用程序,我需要有3种用户类型,如下所示:
class User < ActiveRecord::Base
rolify
...
end
class UserTypeOne < User
....
end
class UserTypeTwo < User
....
end
class UserTypeThree < User
....
end
当我尝试为我的数据库设定种子时,用户的que创建工作正常,但在尝试向其中任何一个添加角色时会出错:
user = UserTypeOne.find_or_create_by_email :name => 'User one', :email => 'userone@test.com', :password => 'userone', :password_confirmation => 'userone'
user.confirm!
user.add_role :admin
rake aborted!
undefined method `find_or_create_by' for nil:NilClass
但用户插入正确...我做错了什么?
提前致谢!
答案 0 :(得分:0)
尝试添加
self.adapter = User.adapter
每个继承的类。
示例:
class UserTypeOne < User
self.adapter = User.adapter
....
end
这对我有用。
答案 1 :(得分:0)
在ActiveRecord中使用STI时,Rolify只知道查看当前类 而不是父母。
以下是问题: https://github.com/EppO/rolify/issues/138
上面的Ethans答案应该有效,但Here是Rolify常见问题解答中的答案。
就个人而言,我不喜欢这两种解决方案。 也许Rolify可以在继承类时传递适配器。类似的东西:
def self.inherited(klass)
klass.adapter = self.adapter
super # EDIT: added super call to prevent ActiveRecord error (NoMethodError: undefined method `synchronize' for nil:NilClass)
end