如何在Ruby on Rails中编写mark_as_deleted方法?

Ulf*_*ose 2 ruby-on-rails-3

我想编写一个方法,它应该像任何Rails默认控制器中的destroy方法一样工作,但不应该真正删除数据.相反,它应该设置一个标志或我可以在我的视图中评估的东西,以便不再显示这些数据.

因此,当用户单击"删除"时,相应的操作应将数据标记为已删除但不从数据库中清除数据.

编写这种方法最优雅的方法是什么?我正在使用Rails 3.

Dty*_*Dty 5

如果您只想显示或隐藏数据,我将is_visible在数据库中有一个布尔字段.

此外,不是在您的视图中评估是否显示此数据,而是将该逻辑放入模型中default_scope(在rails 3中可用).这样的事情(假设你想显示/隐藏Articles)......

# model
class Article < ActiveRecord::Base
  default_scope where(:is_visible => true)
end
Run Code Online (Sandbox Code Playgroud)

显然,你的delete方法应该只将is_visibleboolean 设置为false创建它应该默认为true.

然后,您只需要小心,如果您的数据与其他数据有关系.在这个例子中,如果你有Articles,那么他们Comments可能你不希望它Comments出现在任何地方,如果Article标记为不可见.