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  

每次都去數據庫取,這樣就能保證數據的正確性。 
擔心效率的朋友們,放心,還有查詢緩存呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章