2012-11-09 46 views
0

我無法弄清楚我的生活。我正在使用CanCan和InheritedResources。我想刪除一個組,但是撤銷組中的用戶(不要從數據庫中刪除它們)。撤銷是通過在用戶上設置revokedtrue來完成的。在我的測試中,開始時有2個用戶,還有一個組。ActiveRecord的保存!方法是從數據庫中刪除我的對象

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!正在悄悄地刪除我的記錄。

+0

CanCan和InheritedResources應該與控制器一起工作。目前尚不清楚您要展示的代碼。這是你的組模型嗎?你的組控制器? – davidrac

+0

呃......對不起,控制器,忘了包含「控制器」 –

+1

請向我們展示'User'模型。我懷疑有一個'default_scope',它正在干涉。您的用戶沒有被刪除,只是隱藏在默認範圍之內。 –

回答

0

目前尚不清楚對我來說,從上下文上面,爲什麼發生這種情況...

嘗試使用的user.update_column :revoked, true代替user.revoked = trueuser.save!。這可以避免回調,這可能會(可能)干擾某些事情。

+0

沒有範圍仍然刪除記錄。知道update_column仍然刪除記錄有幫助嗎? –

+1

好了,這意味着我的預感是錯誤的,並且它不是回調相關的......你可能不得不提供更多信息,正如Ryan Bigg所建議的那樣 - 它可能不是默認範圍,但是可能會發生一些外部事件你發佈的內容。另外,你可能想直接看數據庫,看看這些項目是否真的存在。 –

相關問題