【问题标题】:conditional logic not working in haml条件逻辑在haml中不起作用
【发布时间】:2012-08-11 19:31:06
【问题描述】:

我有一个如下所示的 HAML 模板(也使用 Sinatra,不确定这是否重要):

- @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”和表单,表明参数为空......一切都按计划工作。

现在,当我在表单中填写“testing@gmail.com”并单击按钮时,它会重定向回“/”,我看到“EMAIL:xtesting@gmail.comtesting@gmail.comfalsex”告诉我我的条件逻辑应该可以工作。

但我仍然看到表单,我的 else 语句没有被执行…… if 语句仍在被触发。

我猜这是一个简单的格式问题。有人可以帮忙吗?

以防万一,我的 Sinatra 应用文件很简单:

get '/' do
  haml :index
end

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

谢谢

【问题讨论】:

    标签: ruby if-statement sinatra haml


    【解决方案1】:

    这个 if 语句永远为真

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

    那是因为您正在使用 #{} 创建一个字符串,并且只有 nil 和 false 会翻转 if。

    所以你需要写类似的东西

    -if @email.blank?
    

    更新:

    这不太对,看看@matt的评论

    【讨论】:

    • 这就是我最初所拥有的,但是当我这样做时,我得到:未定义的方法`空白?对于 nil:NilClass
    • 好的,我明白了,但我还是有点困惑。我没有意识到你用#{} 创建了一个字符串,所以这是问题的一部分。我将 if 更改为 -if params[:email].to_s.empty?,但为什么我需要对此执行 to_s?
    • 可能是sinatra没有提供空白的情况?方法。使用零?而是
    • 将其标记为答案......即使它不是我问题的确切答案,它也引导我朝着正确的方向前进,非常感谢。谢谢!
    • 这不是完全正确的。在-if #{@email.to_s.empty?} 中,# 是一个注释字符,因此该行实际上就是if。条件就是下一行的任何内容(%form... 等),当 Haml 被编译时是对Buffer#push_text 的调用。这因此总是被执行,并且返回一个真值,所以(现在为空的)true分支总是被执行。整体效果就像#{@email.to_s.empty?}evaluateates为真,和fix一样,但现实有点更微妙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    相关资源
    最近更新 更多