2012-03-15 21 views
0

我有一个Photo对象和一个Activity观察者。假消灭行动?

活动基本上只是网站上最近活动的列表(上传照片,发表评论等)。

现在我在活动观察者中有一个before_destroy方法,这样当一个对象(如照片)被销毁时,它将从最近的活动列表中删除活动。

但我需要做的是有点假照片的销毁行动。

当有人“删除”他们的照片时,我们实际上并不销毁数据库中的记录,我们只是将其标记为不活动。

但是由于我使用的是观察者,当用户触发Photo.destroy方法时,如何在Activity观察者中仍然可以触发该方法before_destroy

下面是两个照片对象和观察者的基本代码...

class PhotosController < ApplicationController 
    def destroy 
    @photo.update_attribute(:active, false) 
    end 
end 


class ActivitySourceObserver < ActiveRecord::Observer 
    observe :photo 

    def before_destroy(activity_source) 
    Activity.destroy_all(:activity_source_id => activity_source.id) 
    end 
end 
+0

您能否包含一些基本的代码片段来说明问题? (我在某种程度上理解了这个问题,并希望看到答案。) – DavB 2012-03-15 12:33:24

+0

@DavB当然。发布更新。 – Shpigford 2012-03-15 13:40:50

回答

1

由于您正在更新资源而不是删除它,您是否可以不使用before_update方法?

class PhotosController < ApplicationController 
    def destroy 
    @photo.update_attribute(:active, false) 
    end 
end 

class ActivitySourceObserver < ActiveRecord::Observer 
    observe :photo 

    def before_update(activity_source) 
    if activity_source.has_attribute? :active && activity_source.active == false 
     Activity.destroy_all(:activity_source_id => activity_source.id) 
    end 
    end 
end 

我没有测试过这个,但我希望你明白我的意思。