よくある質問
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'}!
pre
と textarea
タグの内容を Haml のインデントから停止するにはどうすればよいですか?
Haml は HTML ソースコードを自動的にインデントするため、pre
と textarea
のように空白の影響を受けるタグの内容は台無しになる可能性があります。解決法は、これらのタグ内の改行を HTML 改行エンティティ (

) で置き換えることです。Haml は Haml::Helpers#preserve と Haml::Helpers#find_and_preserve ヘルパーを使用してこれを行います。
通常、Haml は必要なタグを使用している場合に自動的にこれを行います (これは :preserve
オプションを使用してカスタマイズできます)。たとえば、
%p
%textarea= "Foo\nBar"
は次のようにコンパイルされます。
<p>
<textarea>
Foo
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
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
で質問するか、 メーリングリスト にメールを送ってください.