2012-09-28 74 views
7

毀我維護別人的代碼基礎,他們有這樣的事情:檢查ActiveRecord的對象是使用.destroy()的返回值

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

不應該「錯誤刪除部件」在其他部分? – sheerun

+0

@sheerun,這是我懷疑,但我找不到任何文件 – highBandWidth

回答

5

如果您不確定,可以使用destroyed?方法。 destroy的返回值沒有記錄,但它只返回凍結的被銷燬對象(你不能更新它)。它不返回銷燬行爲的狀態。

雖然通常銷燬對象應該總是成功,但您可以聽取ActiveRecordError。例如Optimistic Locking可以在記錄銷燬時引發ActiveRecord :: StaleObjectError。

1

根據Ruby on Rails API documentationdestroy方法將返回您銷燬的對象,但處於凍結狀態。

當一個對象被凍結時,不應該對該對象進行任何更改,因爲它不能再被持久化。

您可以使用object.destroyed?檢查對象是否被破壞。

3

正如上面提到的那樣,destroy不返回布爾值,而是返回一個凍結對象。另外它還會更新您調用的實例對象的狀態。這裏是我如何寫控制器:

@widget_part.destroy 

if @widget_part.destroyed? 
    flash[:success] = 'The part is destroyed' 
else 
    flash[:error] = 'Failed to destroy' 
end 
相關問題