Rails - after_save - 如何确定记录是创建/更新还是删除

时间:2011-04-23 02:22:04

标签: ruby-on-rails ruby-on-rails-3

在我的rails应用程序中,我有以下型号:

Messages (id, title, content, project_id)
MessageViews (id, message_id, view_status)
Permissions (id, user_id, project_id)
Projects (id, name)

每当用户被添加到项目中的现有消息时,我想为项目中的每条消息创建一条MessageView记录。

同样,如果删除了用户的项目权限,我想删除与该项目消息关联的所有用户的messageView。

在我的权限模型中,到目前为止我有:

  before_destroy :check_message_views

  private

  def check_message_views
      .....
  end

如何在check_message_views中确定是否正在创建/更新或删除记录。

When created/updated, I want to loop through and check
When deleted, I want to loop through all the project's messages and delete any messageView for that user.

由于

1 个答案:

答案 0 :(得分:1)

您的MessageView模型不应属于Permission吗?然后你可以设置:dependent=>:destroy,一切都应该自动运行。

否则您可以使用destroyed?方法。

我认为没有任何等效的created?方法,但您可以将代码放在Permissions模型的after_create回调中。如果你想要保持一致,那么对此问题也有一个after_destroy回调。

另一种hacky方法是检查模型的created_at时间是否与updated_at时间相同。如果是,那么它已被创建但尚未更新。