Rails - 用于活动和非活动数据的软删除或存档

时间:2012-04-10 03:36:10

标签: ruby-on-rails archive soft-delete

我已经阅读了很多关于软删除和存档的内容,并看到了所有的优点和缺点。我仍然对哪种方法最适合我的情况感到困惑。我将使用帖子和评论的概念来看看我是否可以更轻松地解释它

Post -> Comments
Post.all

Outside RSS Feeds -> Post -> Comments
RSSFeed.posts (Return the ones that are deleted or not)

帖子被“删除”但我需要帖子仍然可以通过RSS Feed来访问,但不能访问应用程序的管理员。

我听到很多令人头疼的软删除但认为它可能对我的应用程序最有意义,并觉得如果我使用Archive然后我将不得不运行多个查询

RSSFeed.posts || RSSFeed.archived_posts  

不确定@ $$中哪个更有效率或更痛苦。想法或例子?我知道这个例子听起来很愚蠢,但试图想出可以用来确定走哪条路的多种情况。

2 个答案:

答案 0 :(得分:2)

只需在数据库中添加另一列,并将其命名为archivated

使用link_to_if作为链接:

<%= link_to_unless @post.archivated?, @post.name, post_path(@path) %>

更多铁路的优点:

应用/模型/ post.rb

class Post < ActiveRecord::Base
  default_scope where( active: true )

  def archivate
    unless self.archivated?
      self.archivated = true
      self.save
    end
  end

  def dectivate
    if self.archivated?
      self.archivated = false
      self.save
    end
  end
end

应用/模型/ archive.rb

class Archive < Post
  set_table_name :posts # make this model use the posts table

  default_scope where( active: false )
end

现在你可以做这样的事情:

@post = Post.find(some_id)
@post.archivate
Archive.find(some_id) # should return the post you just archivated

答案 1 :(得分:0)

绝对你会明白,看看:

http://railspikes.com/2010/2/26/acts-as-archive