我已经阅读了很多关于软删除和存档的内容,并看到了所有的优点和缺点。我仍然对哪种方法最适合我的情况感到困惑。我将使用帖子和评论的概念来看看我是否可以更轻松地解释它
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
不确定@ $$中哪个更有效率或更痛苦。想法或例子?我知道这个例子听起来很愚蠢,但试图想出可以用来确定走哪条路的多种情况。
答案 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)