加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:09:56 所属栏目:百科 来源:网络整理
导读:我已经阅读了很多关于软删除和存档的内容,并看到了所有的优点和缺点.我仍然对哪种方法最适合我的情况感到困惑.我将使用帖子和评论的概念来看看我是否可以更容易地解释它 Post - CommentsPost.allOutside RSS Feeds - Post - CommentsRSSFeed.posts (Return t
我已经阅读了很多关于软删除和存档的内容,并看到了所有的优点和缺点.我仍然对哪种方法最适合我的情况感到困惑.我将使用帖子和评论的概念来看看我是否可以更容易地解释它

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

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

解决方法

只需在数据库中添加另一列并将其命名为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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读