我这辈子都想不通。我正在使用 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!
正在默默地删除我的记录。