2017-07-29 26 views
1

我不太明白下面代碼的邏輯。一個新的實例是由用戶輸入的數據創建的,代碼繼續說if @item.save。在檢查實例是否已保存或不在if @item.save之前,是否必須保存新實例?什麼時候參數中的數據被保存在下面的代碼中?

def create 
    @item = Item.new(params.require(:item).permit(:title, :description)) 

    if @item.save 
    redirect_to root_path 
    else 
    render :new 
    end 
end 

我不知道爲什麼代碼不是像

def create 
    @item = Item.new(params.require(:item).permit(:title, :description)) 
    @item.save 

    if @item.save 
    redirect_to root_path 
    else 
    render :new 
    end 
end 

回答

2

@item.save運行驗證並保存記錄,如果驗證成功通過。此外save返回true如果記錄被保存,並且false如果驗證失敗。

因此,它既能保存saving也能返回保存操作的狀態。因此沒有必要自己做。

默認情況下,保存總是運行驗證。如果其中任何一個失敗,則取消該操作並保存返回false,並且該記錄不會被保存。

來自save method的文檔引用。

0

#save返回truefalse。如果對象成功保存,則返回true,否則返回false。這允許@item.saveif結構中用作條件表達式。

PS .:還有其他方法#save!。如果對象得到保存,則返回true,否則返回錯誤。

相關問題