よくある質問

Haml

I like <strong>cake</strong>!」のように、要素の後ろに句読点を付けるにはどうすればよいですか?

ドキュメントの構造を表現することと、インライン書式を表現することは、まったく異なる 2 つの問題です。Haml はほとんど構造用として設計されているので、書式処理の最善の方法は、そのように設計されている他の言語に任せることです。Textile

%p
  :textile
    I like *cake*!

または Markdown

%p
  :markdown
    I like **cake**!

または単純な XHTML を使用できます

%p I like <strong>cake</strong>!

リンクのようなヘルパーによって生成されたものを挿入する場合は、さらに簡単です

%p== I like #{link_to 'chocolate', 'http://franschocolates.com'}!

pretextarea タグの内容を Haml のインデントから停止するにはどうすればよいですか?

Haml は HTML ソースコードを自動的にインデントするため、pretextarea のように空白の影響を受けるタグの内容は台無しになる可能性があります。解決法は、これらのタグ内の改行を HTML 改行エンティティ (&#x000A;) で置き換えることです。Haml は Haml::Helpers#preserve と Haml::Helpers#find_and_preserve ヘルパーを使用してこれを行います。

通常、Haml は必要なタグを使用している場合に自動的にこれを行います (これは :preserve オプションを使用してカスタマイズできます)。たとえば、

%p
  %textarea= "Foo\nBar"

は次のようにコンパイルされます。

<p>
  <textarea>
Foo&#x000A;Bar</textarea>
</p>

ただし、ヘルパーがタグを生成する場合、Haml はそれを検出することができないため、自分で Haml::Helpers#find_and_preserve を呼び出す必要があります。~ も使用できます。これは = と同じですが、入力に対して find_and_preserve を自動的に実行する点が異なります。たとえば

%p= find_and_preserve "<textarea>Foo\nBar</textarea>"

はこれと同じです。

%p~ "<textarea>Foo\nBar</textarea>"

表示されるのは

<p><textarea>Foo&#x000A;Bar</textarea></p>

Haml ドキュメントの長い Ruby コード行をどのようにすれば見栄えよくできますか?

ヘルパーまたはモデルに配置します。

Haml は、多数の Ruby コードをテンプレートに配置することをあえて面倒にするように作られています。これは、多くのコードはビューには属さないためです。巨大な link_to_remote 呼び出しを取って update_sidebar_link ヘルパーに移動すれば、ビューの読みやすさと意味的価値の両方が向上します。

テンプレートに大量のコードを配置する必要がある場合、Haml はやや面倒な複数行継続ツールを提供します。(最後の行を含め) 1 つにマージする各行の末尾に | (パイプ文字) を配置します。たとえば

%p= @this.is(way.too.much). |
    code("and I should").   |
    really_move.it.into(    |
      :a => @helper)        |

場合によっては、Ruby のヘルパー呼び出しでテンプレート情報を多数渡す場合に、テンプレートに大量の Ruby を含めることが有効であることに注意してください。したがって、関数が多数の引数を持つ場合は、各行をコンマで終われば、複数行にラップできます。たとえば

= link_to_remote "Add to cart",
    :url => { :action => "add", :id => product.id },
    :update => { :success => "cart", :failure => "error" }

form_for がフォームタグを 2 回も印刷している!

- を使用して呼び出していることを確認してください。= ではありません。ERB のように、

<% form_for stuff do %>
  ...
<% end %>

を行う必要があります。Haml では、

- form_for stuff do
  ...

を行う必要があります

Haml をインストールしました。Rails の理由 (.html.erb ファイルのみを検索する | Haml ファイルをプレーンテキストとして表示する | Haml ファイルを空白ページとして表示する) とは何ですか?

このようなことが起こる理由はいくつかあります。まず、Haml が実際にインストールされていることを確認してください。Gem (Rails 2.3 の config.gem または Rails 3 の Gemfile を経由) を読み込んだか、vendor/plugins/haml が存在し、ファイルを含んでいる必要があります。次に、Mongrel、WEBrick、または使用中のものを再起動してみてください。

@@re_extension = /\.(rjs|rhtml|rxml)$/

最後に、これらがすべて機能しない場合は、Globalize のようなローカリゼーションプラグインがインストールされている可能性があります。そのようなプラグインは、Haml とうまくいかないことがよくあります。幸い、通常は簡単な修正方法があります。Globalize の場合、globalize/lib/globalize/rails/action_view.rb を編集して、

@@re_extension = /\.(rjs|rhtml|rxml|erb|builder|haml)$/

に変更するだけです。他のプラグインについては、少し検索すれば修正方法が見つかるはずです。

申し訳ありません。 Haml リファレンスを参照してください。 回答が見つからない場合は、 irc.freenode.net の #haml で質問するか、 メーリングリスト にメールを送ってください.