2012-08-01 104 views
1

不工作我有一個HAML模板,看起來像以下(也使用辛納屈,不知道這是很重要的):條件邏輯在HAML

- @email = params[:email] 
EMAIL: x#{@email}#{params[:email]}#{@email.to_s.empty?}x 

-if #{@email.to_s.empty?} 
    %form{ :action => "/", :method => "post"} 
    %fieldset 
     %input{:type => "text", :name => "email", :class => "text"}   
     %input{:type => "submit", :value => "Notify me!", :class => "button"} 
-else 
    Thank you for your interest! 

我有頂出那裏進行調試。當我最初加載頁面時,我看到「EMAIL:xtruex」和表單,表明參數是空的......都按計劃工作。

現在,當我填寫表單中的「[email protected]」並點擊按鈕,它會重定向回「/」,我會看到「EMAIL:xtesting @ gmail.comtesting @ gmail.comfalsex」,它告訴我我的條件邏輯應該起作用。

但我仍然看到表單,我的else語句沒有被執行...... if語句仍然被觸發。

我猜這是一個簡單的格式問題。有人可以協助嗎?

萬一它的需要,我的末日應用程序文件很簡單:

get '/' do 
    haml :index 
end 

post '/' do 
    User.create(:email => params["email"]) 
    haml :index 
end 

感謝

回答

3

這個if語句將永遠是真正的

-if #{@email.to_s.empty?} 

那是因爲你正在創建一個字符串與#{}和只有零和假將翻轉如果。

所以你需要寫類似

-if @email.blank? 

UPDATE:

這是不完全正確,看看@馬特的評論

+0

這就是我最初但是當我做我得到:undefined method'blank?'對於零:NilClass – 2012-08-01 20:27:57

+0

好吧,所以我明白了,但我仍然有點困惑。我沒有意識到你用'#{}'創建了一個字符串,這是問題的一部分。我把我的if改成了'-if params [:email] .to_s.empty?'但我爲什麼需要對它做些什麼? – 2012-08-01 20:35:41

+0

可能是sinatra不提供空白的情況?方法。使用零?而不是 – phoet 2012-08-01 20:35:44