Поддельные уничтожить действие? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть объект Photo и обозреватель Activity.

Действия - это просто список недавних действий на сайте (загружены фотографии, комментарии и т. Д.).

Прямо сейчас у меня есть метод before_destroy в обозревателе Activity, так что когда объект (например, фотография) будет уничтожен, он удалит действие из списка недавних действий.

Но мне нужно подделать действие уничтожения фотографии.

На самом деле мы не уничтожаем запись в базе данных, когда кто-то «удаляет» их фотографию, мы просто помечаем ее как неактивную.

Но так как я использую наблюдателей, как я могу по-прежнему запускать этот метод before_destroy в обозревателе Activity, когда пользователь запускает метод Photo.destroy?

Вот базовый код как для объекта Photo, так и для наблюдателя ...

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

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Поскольку вы обновляете ресурс, а не удаляете его, не могли бы вы использовать метод 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

Я не проверял это, но надеюсь, вы понимаете, о чем я.

1 голос
/ 15 марта 2012

Выберите яд: AR soft delete .

...