1

次のような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

ありがとう

4

1 に答える 1

3

このifステートメントは常に真になります

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

これは、で文字列を作成していて#{}、nilとfalseだけがifを反転するためです。

だからあなたは次のようなものを書く必要があります

-if @email.blank?

アップデート:

これは完全に正しくありません。@mattのコメントをご覧ください。

于 2012-08-01T19:32:23.510 に答える