2

我正在使用 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

当我尝试为我的数据库播种时,用户的创建工作正常,但在尝试向其中任何一个添加角色时会出错:

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

但是用户插入正确......我做错了什么?

提前致谢!

4

2 回答 2

0

在 ActiveRecord 中使用 STI 时,Rolify 只知道查看当前类而不是父类。

这是问题所在: https ://github.com/EppO/rolify/issues/138

上面的 Ethans 答案应该可以,但这是Rolify FAQ 中的答案。

就个人而言,我不喜欢这两种解决方案。当类被继承时,也许 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
于 2013-11-12T10:56:00.013 回答
0

尝试添加

self.adapter = User.adapter 

到每个继承的类。

例子:

class UserTypeOne < User
  self.adapter = User.adapter 
  ....
end

这对我有用。

于 2013-07-17T15:41:01.203 回答