2016-09-25 104 views
0
def create 
    chef = Chef.find_by(email: params[:email]) 
    if chef && chef.authenticate(params[:password]) 
     **session[:chef_id] = chef.id** 
     flash[:success] = "You logged In" 
     redirect_to recipes_path 
    else 
     flash.now[:danger] = "Check your email or password" 
     render 'new' 
    end 
    end 

是什麼以下代碼段的第三行代碼是做什麼的?

session[:chef_id] = chef.id 

嗎?那session[:chef_id]是一種變數還是什麼?廚師的ID是分配給哪個?我可以在那裏使用其他名字嗎?

回答

0

session[:chef_id] = :foochef_id鍵值在:foo的會話中。
因此,您可以稍後通過撥打session[:chef_id]來獲取指定的:foo值。

在您的代碼中,它被分配給電子郵件等於​​的廚師的ID。
無論你喜歡什麼,你都可以命名爲:chef_id,但我認爲這是非常正常的名字。

+0

謝謝!那解決了 – Vijay

0

這就是將chef_id存儲在session中,這是一種保持跨多個請求的數據的方式。它不是特定於Rails的,因爲會話在所有Web應用程序中都可用。您可以在Rails會話here以及更多網絡會話上閱讀更多內容here

+0

所以@oreouluwa是約定的一部分?我可以使用 會話[:chef] = chef.id 這會工作嗎? – Vijay

+0

是的,只要不影響應用程序的其他部分,密鑰並不重要。例如,您可能在某處做了'Chef.find(session [:chef_id])',在這種情況下,您必須更改爲'Chef.find(session [:chef])''。然而,爲了清楚起見,因爲它存儲'chef_id'而不是'chef'對象本身,所以我建議你把它保留爲'chef_id' – oreoluwa

+0

是的!謝謝 ! – Vijay