0

我这辈子都想不通。我正在使用 CanCan 和 InheritedResources。我想删除一个组,但撤销组中的用户(而不是从数据库中删除它们)。撤销是通过在用户上设置revoked来完成true的。在我的测试中,一开始有 2 个用户和一组。

class GroupsController < InheritedResources::Base
  load_and_authorize_resource

  def destroy
    p User.all # shows the correct value, 2!

    @group.users.each do |user|
      user.revoked = true
      p User.all # still shows 2 on the first loop iteration
      user.save!
      p User.all # shows 1 on the first iteration! The user was deleted?!
    end

    super # InheritedResources call to destroy the group
end

为什么我的用户会被删除?最后,我没有组,也没有用户!.save!没有引发异常,我也尝试过if user.save,它返回 true。我尝试过使用和不使用super,所以我认为它与 InheritedResources 无关。在我的小组模型中,我有:

has_many :users

没有:dependent => ":destroy"。这里发生了什么?我很惊讶和困惑,save!正在默默地删除我的记录。

4

1 回答 1

0

从上面的上下文中,我不清楚为什么会发生这种情况......

尝试使用user.update_column :revoked, true代替user.revoked = trueand user.save!。这将在没有回调的情况下保存它,这可能(可能?)会干扰某些东西。

于 2012-11-09T04:43:03.137 回答