2016-09-25 116 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