2016-06-07 55 views
0

我通過邁克爾·哈特爾的軌道書的工作,我很好奇它是如何工作:爲什麼以這種方式使用「if @ user.save」?

if @user.save 

else 

end 

在if語句,這種觀點實際上並沒有做任何事情,除了多返回true或false。

此方法似乎將模型保存到數據庫,然後返回true或false。這是常見的/我是對的嗎?爲什麼我們這樣做?

回答

4

通常if @user.save正在檢查使用ActiveRecord是否將對象成功保存到數據庫。從那裏你可以做一些事情,比如設置一個flash消息並在某個地方重定向。在else條款中,您可以檢查@user.errors以查看出了什麼問題並處理。

實施例:

def create 
    #Set user object attributes using strong parameters 
    @user = User.new(user_params) 

    #Attempt to save @user 
    if @user.save 
    flash[:notice] = 'User saved successfully' 
    redirect_to somewhere_else_url 
    else 
    #Saving failed, we can inspect @user.errors for more information 
    flash[:alert] = 'User was not saved.' 

    #If using a form library @user.errors will be displayed graphically when rendering the :new action 
    render :new 
    end 
end 
+1

但在我看來,如果@ user.save也在進行保存 - 它將模型保存到數據庫,然後返回true –

+0

正確。 '@ user.save'將保存該對象,並且只有在沒有錯誤的情況下保存時才返回true,如果有錯誤,則返回false。這使您可以根據數據庫保存是否成功來編寫邏輯。 http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save – danielrsmith

+0

我想我只是更習慣於如果陳述的參數只是一個變量,存儲真或假 –

2

據邁克爾哈特爾,因爲它是在第6章描述的,如果它成功和否則爲false的節省方法返回true。

因此保存如果沒有錯誤(如驗證)並將用戶模型存儲在數據庫中,方法將成功,否則方法將結束並返回false。

您可以參考第6章here並查看第6.1.3節。

相關問題