ActiveRecord的保存!方法是从数据库中删除我的对象

时间:2012-11-09 03:58:11

标签: ruby-on-rails ruby-on-rails-3 activerecord

我无法想象我的生活。我正在使用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!正默默地删除我的记录。

1 个答案:

答案 0 :(得分:0)

从上述情况来看,我不清楚为什么会发生这种情况......

尝试使用user.update_column :revoked, true代替user.revoked = trueuser.save!。这将保存它而不会回调,这可能(可能?)干扰某些事情。