9

おそらく三項演算子を使用して、HAMLとRubyでこの条件を表現するよりコンパクトな方法を考え出そうとしています:

- if @page.nil?
  %br (nothing yet)
- else
  %br #{@page.name}

( HAML テンプレートにクラスを追加するかどうかを条件付きでテストする Neat way と同様のアプローチを探しています)

あなたの助けをいただければ幸いです:)

4

4 に答える 4

18

あなたが持っているコードは、テキストを<br>要素の子にします。それは望ましくありません。あなたが本当に意味していたのは、次のことだと思います。

%br
- if @page.nil?
  (nothing yet)
- else
  #{@page.name}

このためには、次のように簡単に実行できます。

%br
#{@page.nil? ? "(nothing yet)" : @page.name}

または

%br
= @page.nil? ? "(nothing yet)" : @page.name

または単に:

<br>#{@page ? @page.name : "(nothing yet)"}

ただし、個人的には、コントローラーでこれを「修正」して、次の@pageようなものを常に持つようにします。

unless @page
  @page = Page.new( name:"(nothing yet)", … )
end

これにより、新しい/空/何もないページがどのように見えるかをスタブ化し、ビューでそれを他のページと同じように扱うことができます。にはまだ@pageがない@page.idので、それをテストに使用して、新しいアイテムを作成するか、既存のアイテムを編集するかを決定できます。

これは、アイテムの作成または編集に使用される可能性のあるすべてのフォームを処理する方法です。デフォルト値を持つアイテムを作成する (データベースに追加するのではなく) ことにより、デフォルトを提供します。

余談:ほとんど決して良いアイデア<br>ではない を作成しており、コンテンツ マークアップに使用すべきではないHaml で作成しています 。一歩下がって、自分が何をしているのかを考えるかもしれません。

于 2012-09-08T13:51:52.067 に答える
1

単に行う:

%br
= @page.try(:name)
于 2012-09-08T12:23:47.863 に答える
-1
%br = @page ? (nothing yet) : #{@page.name}
于 2012-09-08T12:35:17.270 に答える