Ruby on rails 在active\u admin中删除用户时出错

Ruby on rails 在active\u admin中删除用户时出错,ruby-on-rails,activeadmin,rails-activerecord,Ruby On Rails,Activeadmin,Rails Activerecord,当我尝试删除用户时,出现以下错误: undefined method `handle_dependency' for #<ActiveRecord::Associations::HasAndBelongsToManyAssociation:0x007fa889b27328>) 未定义的方法“handle#u dependency”用于#) 我的用户模型是: class User < ActiveRecord::Base rolify attr_accessible

当我尝试删除用户时,出现以下错误:

undefined method `handle_dependency' for #<ActiveRecord::Associations::HasAndBelongsToManyAssociation:0x007fa889b27328>)
未定义的方法“handle#u dependency”用于#)
我的用户模型是:

class User < ActiveRecord::Base
  rolify
  attr_accessible :user_attributes
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :role_ids
  has_one :role, :dependent => :destroy

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

  validates_presence_of :username, :email, :password, :case_sensitive => true
  validates_uniqueness_of :email, :case_sensitive => false
  validates_uniqueness_of :username, :case_sensitive => false

  before_create :assign_role

  def assign_role
    self.add_role :user if self.roles.first.nil?
  end

  after_create { |admin| admin.send_reset_password_instructions }

end
class Role < ActiveRecord::Base
  has_many :users, :through => :users_roles, :dependent => :destroy
  belongs_to :resource, :polymorphic => true
  attr_accessible :role_attributes
  resourcify
  scopify
end
class用户:destroy
设计:数据库可认证,:可注册,:可恢复,:可记忆,:可跟踪,:可验证
验证是否存在:用户名、:电子邮件、:密码、:区分大小写=>true
验证以下项的唯一性:电子邮件,:区分大小写=>false
验证用户名的唯一性,区分大小写=>false
创建前:分配角色
def分配_角色
self.add_role:user if self.roles.first.nil?
结束
在创建{| admin | admin.send_reset_password_instructions}之后
结束
我的榜样是:

class User < ActiveRecord::Base
  rolify
  attr_accessible :user_attributes
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :role_ids
  has_one :role, :dependent => :destroy

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

  validates_presence_of :username, :email, :password, :case_sensitive => true
  validates_uniqueness_of :email, :case_sensitive => false
  validates_uniqueness_of :username, :case_sensitive => false

  before_create :assign_role

  def assign_role
    self.add_role :user if self.roles.first.nil?
  end

  after_create { |admin| admin.send_reset_password_instructions }

end
class Role < ActiveRecord::Base
  has_many :users, :through => :users_roles, :dependent => :destroy
  belongs_to :resource, :polymorphic => true
  attr_accessible :role_attributes
  resourcify
  scopify
end
类角色:users\u角色,:依赖=>:destroy
属于:资源,:多态=>true
属性可访问:角色属性
资源化
嘲笑
结束
我做错什么了吗?
handle\u依赖项
方法似乎不存在。非常感谢您的帮助


谢谢。

我无法解释具体的错误,但rolify的宏方法似乎有些混乱。以下是一些背景:

rolify
在用户和角色模型之间建立一个
has\u和\u属于\u many
。因此,用户模型中的
has_one
调用是不必要的,可能会导致问题


resourcify
用于指示用户可以拥有一个或多个与给定类或该类实例相关的角色。用户没有关于角色的角色,他们有关于帖子、文章或其他内容的角色。因此,角色模型中的
resourcify
调用很可能会导致问题。您需要在类中为您试图限制访问的模型调用
resourcify

我在尝试
rolify
resourcify
用户
角色
之外的模型时,已经对此进行了研究。我没有一个明确的答案,但我可以提供我的发现。如果没有其他内容,请确保您拥有最新版本的rolify(“捆绑更新rolify”)

我已经回答了一个类似的问题

不幸的是,我无法弄清楚代码中的
:roles
关联是如何被覆盖的。可能是被覆盖的角色不是
:roles
,但我还没有找到它


这不是一个很好的答案,但我希望它指向了正确的方向。

嗨,史蒂夫。谢谢你的回复。我在角色中添加了resourcify,因为我希望管理员角色能够更改用户的角色,但现在我想起来了,更改是在用户角色中,而不是角色本身,所以我可以删除它。我确实尝试了您建议的更改,但仍然出现相同的错误。有什么方法可以重写方法调用并自己处理吗?我想知道是否是这样的。如果是我,我只需要一个通用角色(不局限于资源),并在允许用户更改角色之前明确检查用户是否拥有该角色,但可能有更优雅的方法来处理它和更复杂的用例,这将使其难以管理。