2011-06-15 68 views
1

拉我的頭髮就這一個:導軌3 - .Nil?重定向不工作

我想一個簡單的「重定向到家裏如果沒有電子郵件會話變量」,當我測試會話變量是nil是說,這是不,那麼代碼會在下一個聲明中抱怨它的nil

下面的代碼:

def index 
    if session[:email].nil? 
    redirect_to root_url 
    end  
    @user = User.find(:first, :conditions => "email = '"+session[:email]+"'") 
end 

所以我跑這當會話不存在,@usernil,因爲當然有與無的電子郵件地址數據庫的用戶。但是爲什麼當session[:email]nil?時它不重定向?順便說一句,我試過存在?和空白?和== nil== ""無效

任何幫助,將不勝感激。感覺我錯過了一些明顯的東西。

謝謝,克里斯

回答

2

嘗試redirect_to root_url and return unless session[:email]and return應該訣竅。

正如亞歷克斯在評論中所說,redirect_to(和render,就此而言)只是方法調用,因此不會將控制權返回給調用對象。

+1

是的,重要的是要記住'redirect_to'不會神奇地將控制權返回給框架,它只是一個函數調用。 – 2011-06-15 20:50:49

+0

這個伎倆,謝謝! – thinkfuture 2011-06-15 21:34:57

0

你試過把它拉到一個單獨的變量。此代碼適用於rails3中的我:

abc = session[:abc] 
if !abc.blank? 
logger.info "blank" 
else 
logger.info "not" 
end 
+0

我試過s = session [:email]然後測試s.nil?同樣的問題。有趣的是,這對我來說在Rails 2中工作正常2 – thinkfuture 2011-06-15 21:32:18

0

你可以嘗試這樣的事情

def index 
    @user = User.find(:first, :conditions => "email = '"+session[:email]+"'") 
rescue ActiveRecord::RecordNotFound 
    redirect_to root_url 
end 

告訴我,如果該訣竅。

+0

這取決於如何設置和使用'session [:email]',但使用異常來處理正常情況通常不是一個好主意。 – 2011-06-15 20:52:14