Rails宝典之第十三式: Model放在Session里的危险

上次我们说到@current_user时不要将user对象放在session里,而只放user_id,然后每次去数据库取user对象。 
有人不理解,这次的视频给出了答案: 
Java代码   收藏代码
  1. class UsersController < ApplicationController  
  2.   def prepare  
  3.     session[:user] = User.find(:first)  
  4.     redirect_to action => 'show'  
  5.   end  
  6.   
  7.   def show  
  8.     @user = session[:user]  
  9.   end  
  10.   
  11.   def update  
  12.     @user = session[:user]  
  13.     @user.name = "Foo"  
  14.     redirect_to :action => 'show'  
  15.   end  
  16. end  

我们先调用prepare,将user放进session并show,然后我们update,结果session里的user对象是更改了,而更改并没有保存到数据库。 
那我们将更改放进数据库不就行了?呵呵,这样每次你更改user对象都需要更新session,太麻烦了。 
Java代码   收藏代码
  1. class UsersController < ApplicationController  
  2.   def prepare  
  3.     session[:user_id] = User.find(:first).id  
  4.     redirect_to :action => 'show'  
  5.   end  
  6.   
  7.   def show  
  8.     @user = User.find(session[:user_id])  
  9.   end  
  10.   
  11.   def update  
  12.     @user = User.find(session[:user_id])  
  13.     @user.name = ""  
  14.     @user.valid?  
  15.     redirect_to :action => 'show'  
  16.   end  
  17. end  

每次都去数据库取,这样就能保证数据的正确性。 
担心效率的朋友们,放心,还有查询缓存呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值