Dan*_*tep 77 ruby activerecord ruby-on-rails
所以有
record.new_record?
Run Code Online (Sandbox Code Playgroud)
检查某些东西是否是新的
我需要检查是否有东西出来了.
record = some_magic
record.destroy
record.is_destroyed? # => true
Run Code Online (Sandbox Code Playgroud)
这样的事情.我知道毁灭会冻结物体,所以冻结?有点作品,但这个任务有明确的东西吗?
Vol*_*ldy 189
去做就对了:
record.destroyed?
Run Code Online (Sandbox Code Playgroud)
详细信息在这里ActiveRecord :: Persistence
rya*_*anb 50
你可以这样做.
Record.exists?(record)
Run Code Online (Sandbox Code Playgroud)
然而,这将对数据库造成打击,这并非真正必要.我知道的唯一其他解决方案就是像74提到的那样进行回调.
attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
self.destroyed = true
end
Run Code Online (Sandbox Code Playgroud)
然后检查record.destroyed.
Ste*_*nik 10
这很快就会到来.在最新的Riding Rails帖子中,它说:
最后,它不一定与BugMash相关,但JoséValim - 在其他几十个提交中 - 添加了model.destroyed?.只有当您正在查看的实例已成功销毁时,此nifty方法才会返回true.
你去吧 快来了!
而record.destroyed?工作正常,并返回true或false,你也可以稍微干这个并在控制器中调用destroy的行上创建if条件.
record = Object.find(params[:id])
if record.destroy
... happy path
else
... sad path
end
Run Code Online (Sandbox Code Playgroud)
认识到这篇文章在游戏中有点晚了.但是,如果有人想讨论这个,我就是游戏!旁注:我的模型上也有一个after_destroy验证,虽然它有效但是像这样的东西的单独方法看起来有点矫枉过正;)
destroy一个物体除了打电话之外不会返回任何东西freeze(据我所知),所以我认为这frozen?是你最好的选择.ActiveRecord::RecordNotFound如果你做了类似的事情,你的另一个选择是拯救record.reload.
我认为迈克上面的策略可能是最好的,或者如果你想开始"做出假设",你可以为这些提到的案例写一个包装器.
干杯.