0

我目前正在使用 Rails 3 + 设计。我通过将 Time.now 设置为 User.deleted_at 来软删除用户。

这将删除用户。然后在我的 application_controller 中,我检查以摆脱任何软删除的用户。

  before_filter :no_deleted_users

  def no_deleted_users
    if current_user && current_user.deleted_at
      flash[:alert] = "Access Denied"
      return sign_out_and_redirect('/')
    end
  end

问题是软删除的用户仍然出现在我的应用程序中。我有这样的模型:

User (id, deleted_at)
GroupMember(id,user_id)
Comment(id,user_id)

我怎样才能使 soft_deleted 用户永远不会出现在应用程序中?我尝试在 User.rb 中这样做:

default_scope :conditions => 'users.deleted_at IS NULL'

但是当我执行 group.group_members 之类的操作时,该范围不起作用。仍然返回了带有已软删除的 user_id 记录的 Group_members。

关于如何优雅地处理删除应用程序中的 soft_deleted 用户的建议?

谢谢

4

1 回答 1

1

您的 GroupMember 记录不会知道用户的默认范围。如果您通过组成员指定一个组具有许多用户,那么我希望 group.users 仅返回具有您的用户默认范围的现有用户。要使 group.group_members 行为符合预期,您需要删除将组关联到软删除用户的记录,或者在 GroupMember 中维护一个单独的默认范围,例如(假设 Rails 3):

class GroupMember < ActiveRecord::Base
  belongs_to :user
  default_scope joins(:user).where('users.deleted_at IS NULL')

  # rest of the class
end
于 2012-09-23T02:53:03.387 回答