检查记录是否刚刚在rails中销毁

时间:2009-08-18 23:25:27

标签: ruby-on-rails ruby activerecord

所以有

record.new_record?

检查是否有新内容

我需要检查是否有东西出现了。

record = some_magic
record.destroy
record.is_destroyed? # => true

这样的事情。我知道毁灭会冻结物体,所以冻结?有点作品,但这个任务有明确的东西吗?

6 个答案:

答案 0 :(得分:185)

就这样做:

record.destroyed?

详情请见ActiveRecord::Persistence

答案 1 :(得分:47)

你可以这样做。

Record.exists?(record)

然而,这将对数据库造成打击,这并非真正必要。我知道的唯一其他解决方案就是像74提到的那样进行回调。

attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
  self.destroyed = true
end

然后检查record.destroyed

答案 2 :(得分:10)

这很快就会到来。在最新的Riding Rails帖子中,它说:

  

最后,它不一定   BugMash相关,但JoséValim -   在几十个其他提交之中 - 补充说   model.destroyed?这个漂亮的方法   仅在实例时才返回true   你现在正在看着   成功销毁。

所以你去吧。即将推出!

答案 3 :(得分:6)

当record.destroyed?工作正常,并且返回true或false,你也可以稍微干这个并在控制器中调用destroy的行上创建if条件。

record = Object.find(params[:id])
if record.destroy
  ... happy path
else
  ... sad path
end

意识到这篇文章在游戏中有点晚了。但是,如果有人想讨论这个,我就是游戏! 旁注:我的模型上也有一个after_destroy验证,虽然它有效但是像这样的东西的单独方法似乎有点矫枉过正;)

答案 4 :(得分:5)

destroy一个对象除了调用freeze之外不会返回任何内容(据我所知),所以我认为frozen?是你最好的选择。如果您执行ActiveRecord::RecordNotFound之类的操作,则另一种选择是从record.reload营救。

我认为迈克上面的策略可能是最好的,或者如果你想开始'做出假设',你可以为这些提到的案例写一个包装。

干杯。

答案 5 :(得分:0)

在不了解您的应用程序的更多逻辑的情况下,我认为冻结?是你最好的选择。

如果不这样做,您当然可以在回调中触发的模型中添加“已销毁”属性,如果您想要更精确的解决方案,可以对其进行检查。