所以有
record.new_record?
检查是否有新内容
我需要检查是否有东西出现了。
record = some_magic
record.destroy
record.is_destroyed? # => true
这样的事情。我知道毁灭会冻结物体,所以冻结?有点作品,但这个任务有明确的东西吗?
答案 0 :(得分:185)
答案 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)
在不了解您的应用程序的更多逻辑的情况下,我认为冻结?是你最好的选择。
如果不这样做,您当然可以在回调中触发的模型中添加“已销毁”属性,如果您想要更精确的解决方案,可以对其进行检查。