0

私は私の人生のためにこれを理解することはできません。CanCan と InheritedResources を使用しています。グループを削除したいが、グループ内のユーザーを取り消したい (データベースからは削除しない)。失効は、ユーザーに設定revokedすることによって行われtrueます。私のテストでは、最初は 2 人のユーザーと 1 つのグループがいます。

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 = trueuser.save!

于 2012-11-09T04:43:03.137 に答える