ruby-on-rails - Rails - 事件和非事件数据的软删除或存档

标签 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 提要而不是应用程序管理员访问的帖子。

我听到了很多关于软删除的问题,但我认为它可能对我的应用程序最有意义,并且感觉如果我使用 Archive 那么我将不得不运行多个查询
RSSFeed.posts || RSSFeed.archived_posts  

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

最佳答案

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

使用 link_to_if对于链接:

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

更多的 rails 优点:

应用程序/模型/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

关于ruby-on-rails - Rails - 事件和非事件数据的软删除或存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082813/

相关文章:

php - 在分类归档页面上显示自定义帖子类型中的所有帖子

java - 如何在某些情况下忽略@SQLDelete注释

ruby-on-rails - XPath:仅包含特定字符串的选择节点

ruby-on-rails - 在 Rails 路由中将路径重定向到新域

mysql - Ruby libxml 解析并插入数据库

ruby-on-rails - 如何检测有多少活跃的 Unicorn 工作人员处于忙碌状态?

php - PHP 中的 GZipStream

linux: ranlib 似乎没有将任何新信息添加到存档文件中?

azure - 如何使用 Powershell 从 Microsoft Azure 恢复已删除的容器?

Laravel 软删除 restore() 错误