删除我有三个型号:软与各协会
用户:
class User < ActiveRecord::Base
has_many :posts, :dependent => :destroy
scope :active, -> { where(deleted: false) }
end
帖子:
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments, :dependent => :destroy
scope :active, -> { where(deleted: false) }
end
评论:
012现在,我做软删除User
,我已经列命名为所有三个表(User, Post, Comment
)
用户销毁方法deleted
:
def destroy
@user = user.find(params[:id])
if @user.update_attributes(deleted: true)
@user.posts.each do |post|
post.comments.update_all(deleted: true)
end
@user.posts.update_all(deleted: true)
end
end
上述实施需要更多的时间时,没有。的文章和评论都高,它也创造N + 1查询问题..
同上我已经实现destroy
方法Post
,我不知道如何有效地做到这一点..
我不不想使用任何宝石。
请告诉我一个更好的方式做软删除这些类型的社团..
你真的需要删除帖子吗?您可以通过在检索时包含用户模型来扩大范围。将所有后代标记为已删除确实没有必要。 – Matt
更好的方法是使用宝石:Paranoia(https://github.com/rubysherpas/paranoia)或ActsAsParanoid(https://github.com/ActsAsParanoid/acts_as_paranoid)。 – 2016-07-06 12:51:41
@gen海报表示他不想使用宝石。 – Matt