所以就有了
record.new_record?
检查某事是否为新事物我要检查一下是不是有什么东西出来了。
record = some_magic record.destroy record.is_destroyed? # => true
差不多是这样。我知道破坏会冻结物体,所以冻结了?有点管用,但这项任务有什么明确的内容吗?
blpfk2vs1#
就这么做吧:
record.destroyed?
详细信息在此处ActiveRecord::Persistence
2jcobegt2#
你可以做到的。
Record.exists?(record.id)
然而,这将对数据库造成冲击,这并不总是必要的。我所知道的唯一另一种解决方案是像IV提到的那样进行回调。
attr_accessor :destroyed after_destroy :mark_as_destroyed def mark_as_destroyed self.destroyed = true end
然后检查record.destroyed。
record.destroyed
r1zhe5dt3#
这很快就会到来。在最新的Riding Rails帖子中,它写道:最后,它不一定与BugMash相关,但JoséValim-在其他几十个提交中-添加了模型。销毁?只有当您当前查看的示例被成功销毁时,这个漂亮的方法才会返回TRUE。这就对了。马上就来!
o2g1uqev4#
destroy只返回对freeze的调用(据我所知),所以我认为frozen?是最好的选择。如果你做了像record.reload这样的事情,你的另一个选择是从ActiveRecord::RecordNotFound中拯救出来。我认为Mike上面的策略可能是最好的,或者如果你想开始“做假设”,你也可以为上面提到的这些案例编写一个 Package 。干杯。
destroy
freeze
frozen?
record.reload
ActiveRecord::RecordNotFound
8xiog9wr5#
当唱片被毁的时候?运行良好,并且确实返回TRUE或FALSE,您也可以稍作处理,并在控制器中调用Destroy的行上创建if条件。
record = Object.find(params[:id]) if record.destroy ... happy path else ... sad path end
意识到这个帖子在游戏中有点晚了。但如果有人想要更多地讨论这个问题,我很乐意!附注:我在我的模型上也有一个After_Destroy验证,虽然它有效,但对于类似的事情,一个单独的方法似乎有点过头了;)
rfbsl7qr6#
在没有更多了解你的应用程序的逻辑的情况下,我认为这是冻结的?是你最好的选择。如果做不到这一点,您当然可以向您的模型添加一个在回调中触发的“DESTOLED”属性,如果您想要一个更精确的解决方案,可以对照该属性进行检查。
dwbf0jvd7#
简短的答案是:
record.destroyed? # fastest, doesn't require extra database check Record.exists?(record) # slower
不要使用record.destroy的返回值,它将“始终”返回记录的冻结示例,无论它是否被删除,就在您试图删除它之前。查看此处:https://apidock.com/rails/v5.2.3/ActiveRecord/Persistence/destroy如果您在控制器中,destroy!将抛出一个ActiveRecord::RecordNotDestroyed,您可以根据before_destroy回调来捕获它。
record.destroy
destroy!
ActiveRecord::RecordNotDestroyed
before_destroy
def destroy render json: @record.destroy! rescue ActiveRecord::RecordNotDestroyed # @record will work fine down here, it still exists. render json: { errors: ["Record not destroyed"] } end
7条答案
按热度按时间blpfk2vs1#
就这么做吧:
详细信息在此处ActiveRecord::Persistence
2jcobegt2#
你可以做到的。
然而,这将对数据库造成冲击,这并不总是必要的。我所知道的唯一另一种解决方案是像IV提到的那样进行回调。
然后检查
record.destroyed
。r1zhe5dt3#
这很快就会到来。在最新的Riding Rails帖子中,它写道:
最后,它不一定与BugMash相关,但JoséValim-在其他几十个提交中-添加了模型。销毁?只有当您当前查看的示例被成功销毁时,这个漂亮的方法才会返回TRUE。
这就对了。马上就来!
o2g1uqev4#
destroy
只返回对freeze
的调用(据我所知),所以我认为frozen?
是最好的选择。如果你做了像record.reload
这样的事情,你的另一个选择是从ActiveRecord::RecordNotFound
中拯救出来。我认为Mike上面的策略可能是最好的,或者如果你想开始“做假设”,你也可以为上面提到的这些案例编写一个 Package 。
干杯。
8xiog9wr5#
当唱片被毁的时候?运行良好,并且确实返回TRUE或FALSE,您也可以稍作处理,并在控制器中调用Destroy的行上创建if条件。
意识到这个帖子在游戏中有点晚了。但如果有人想要更多地讨论这个问题,我很乐意!附注:我在我的模型上也有一个After_Destroy验证,虽然它有效,但对于类似的事情,一个单独的方法似乎有点过头了;)
rfbsl7qr6#
在没有更多了解你的应用程序的逻辑的情况下,我认为这是冻结的?是你最好的选择。
如果做不到这一点,您当然可以向您的模型添加一个在回调中触发的“DESTOLED”属性,如果您想要一个更精确的解决方案,可以对照该属性进行检查。
dwbf0jvd7#
简短的答案是:
不要使用
record.destroy
的返回值,它将“始终”返回记录的冻结示例,无论它是否被删除,就在您试图删除它之前。查看此处:https://apidock.com/rails/v5.2.3/ActiveRecord/Persistence/destroy如果您在控制器中,
destroy!
将抛出一个ActiveRecord::RecordNotDestroyed
,您可以根据before_destroy
回调来捕获它。