4

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

Post -> Comments
Post.all

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

帖子被“删除”,但我需要仍然可以从 RSS 提要访问帖子,但不是应用程序的管理员。

我听到很多关于软删除的头痛,但认为这对我的应用程序可能最有意义,并且觉得如果我使用存档,那么我将不得不运行多个查询

RSSFeed.posts || RSSFeed.archived_posts  

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

4

2 回答 2

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
于 2012-04-10T04:29:22.427 回答
0

你肯定会明白的,看看:

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

于 2012-04-10T11:53:44.667 回答