0

我在 rails 4 应用程序中使用 socialization gem 和 public_activity gem。

我的一切都按我想要的方式工作,除了我无法弄清楚一旦删除它所引用的项目后如何删除活动记录。

http://swatinakshtra.wordpress.com/2013/11/24/public_activity-gem/

这篇博客文章提到您可以在被删除对象的控制器中使用 before_destroy 方法删除这些,但我无法访问该控制器,因为它是 socializer gem 的一部分。

实现这一目标的正确方法是什么?我想我正在寻找某种“删除时级联”选项。

4

2 回答 2

2

您可以从 Socializer gem 扩展模型,并在我所指的活动对象的模型中添加一个 :after_destroy 方法。

我没有与 Socializer 合作过,但对 Acts_as_taggable_on gem 做了类似的事情。在我的初始化程序中,我添加了一个带有以下内容的acts_as_taggable_on_extension.rb:

module ActsAsTaggableOn
  class Tagging
  include PublicActivity::Common
  after_destroy :delete_tag_activity

  def delete_tag_activity
      activity = PublicActivity::Activity.where('trackable_type = ? AND trackable_id = ?',  'ActsAsTaggableOn::Tagging',self.id).first
    if activity
      activity.destroy
    end
  end

  end
end
于 2014-07-28T12:39:24.080 回答
0

我通过添加暂时解决了这个问题

PublicActivity::Activity.where('trackable_type = ? and trackable_id not in (select id from likes)', ["Socialization::ActiveRecordStores::Like"]).delete_all

到在我的不同之后运行的程序,以及在取消关注后运行的类似程序。它暂时起到了作用。

我希望有人通过更自动化的解决方案获得更好的答案。

于 2014-07-11T14:08:25.023 回答