我维护某人的代码库,他们有类似的东西:
if @widget_part.destroy
flash[:message] = "Error deleting widget part"
else
flash[:message] = "Widget part destroyed successfully"
end
destroy
返回什么?可以这样测试吗?我问的原因是我试图使用
flash[:message] = "Error deleting widget part : #{@widget_part.errors.inspect}"
并且没有错误消息,所以我很困惑。它给出了像
这样的东西#<ActiveModel::Errors:0x00000103e118e8 @base=#<WidgetPart widget_id: 7, ...,
id: 67>, @messages={}>
答案 0 :(得分:5)
如果您不确定,可以使用destroyed?
方法。 destroy的返回值是未记录的,但它只返回冻结的被破坏对象(你不能更新它)。它不会返回销毁行为的状态。
虽然通常会破坏对象应始终成功,但您可以听取ActiveRecordError。例如,Optimistic Locking可以在记录销毁时引发ActiveRecord :: StaleObjectError。
答案 1 :(得分:3)
正如上面提到的那些人,destroy
没有返回布尔值,而是返回一个冻结对象。此外,它还会更新您调用它的实例对象的状态。以下是我编写控制器的方法:
@widget_part.destroy
if @widget_part.destroyed?
flash[:success] = 'The part is destroyed'
else
flash[:error] = 'Failed to destroy'
end
答案 2 :(得分:1)
根据Ruby on Rails API documentation,destroy
方法将返回您销毁但仍处于冻结状态的对象。
当一个对象被冻结时,不应该对该对象进行任何更改,因为它不能再被持久化。
您可以使用object.destroyed?
检查对象是否已被销毁。