2012-08-01 89 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