Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 检查记录是否在rails中被销毁_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 检查记录是否在rails中被销毁

Ruby on rails 检查记录是否在rails中被销毁,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,确实如此 record.new_record? 检查是否有新的东西 我需要检查一下是否有什么东西要出去了 record = some_magic record.destroy record.is_destroyed? # => true 差不多吧。我知道破坏会使物体冻结,所以冻结?有点不错,但是这项任务有明确的内容吗?在不了解应用程序逻辑的情况下,我认为已经冻结了?这是你最好的选择 如果做不到这一点,您当然可以向您的模型添加一个在回调中触发的“destrocted”属性,如果您想要更精

确实如此

record.new_record?
检查是否有新的东西

我需要检查一下是否有什么东西要出去了

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

差不多吧。我知道破坏会使物体冻结,所以冻结?有点不错,但是这项任务有明确的内容吗?

在不了解应用程序逻辑的情况下,我认为已经冻结了?这是你最好的选择


如果做不到这一点,您当然可以向您的模型添加一个在回调中触发的“destrocted”属性,如果您想要更精确的解决方案,可以对该属性进行检查

destroy
ing一个对象只会返回一个调用
freeze
(据我所知),所以我认为
冻结?
是最好的选择。如果您执行了类似于
record.reload
的操作,您的另一个选项是从
ActiveRecord::RecordNotFound
中解救

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

干杯。

你可以做到

Record.exists?(record.id)
然而,这将对数据库产生影响,这并不总是必要的。我所知道的唯一的另一个解决方案是像他们提到的那样进行回调

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

然后检查记录。销毁

这很快就会到来。在最新的帖子中,它写道:

最后,这不一定 BugMash相关,但JoséValim- 在数十个其他提交中,添加了 模型,被破坏了?。这种巧妙的方法 仅当实例 您当前正在查看的是 成功摧毁

好了。马上就来

就这么做吧:

record.destroyed?

详细信息在这里

记录被销毁时?工作正常,并返回true或false,您还可以将其干燥一点,并在控制器中调用destroy的线路上创建if条件

record = Object.find(params[:id])
if record.destroy
  ... happy path
else
  ... sad path
end
意识到这篇文章在游戏中有点晚了。但如果有人想进一步讨论这个问题,我很高兴!
旁注:我还对我的模型进行了销毁后验证,在它工作的同时,对类似这样的东西使用单独的方法似乎有些过头了;)

我现在只检查了冻结?,但我真的可以加载一些东西,并冻结它用于其他目的,这将是一个谎言,然后。。。在目前的情况下,冻结?工作很好,但我不想长期依赖它。我认为一些上下文在这里是有帮助的。这取决于你为什么想知道一个物体是否被摧毁。如果您将其作为单元测试的一部分,那么对数据库的额外攻击就可以了。如果您是作为应用程序的一部分进行此操作,那么选择第二条路线可能是更好的选择。不再需要这样做,请在Rails 4中使用
object.destromed?
弃用警告:您正在将ActiveRecord::Base的实例传递给
exists?
。请通过调用
传递对象的id。id
仍然需要
记录。控制器规范中是否存在?
,因为我无法重新加载已销毁的记录以检查它是否已
销毁?
。但是如果我有实例变量要检查
assings
,那么我可以使用
destromed?
@Daniel Huckstep,如果您还活着,请将接受的答案更改为正确答案!