2011-07-07 14 views
1

HAMLがrenderメソッドをRailsでどのように処理するかが不一致に見えてしまいました。 HAML例1HAMLがRailsテンプレートのブロックをレンダリングする方法の微妙な違い

# template.html.erb 
This is the index template. 
<%= render :layout => 'form4', :partial => 'stuff2' %> 

# _layout.html.erb 
<%= form_tag do %> 
    <div class="something"> 
     <%= yield %> 
    </div> 
<% end %> 

# _partial.html.erb 
<b>meh</b> 
<%= text_field_tag 'name' %> 

で:

例1 ERB

# template.html.haml 
This is the index template. 
=render :layout => 'form2', :partial => 'stuff1' 

# _layout.html.haml 
=form_tag do 
    .something 
     =yield 

# _partial.html.haml 
%b meh 
=text_field_tag 'name' 

予想されるように、同じレンダリングの両方の結果(以下略します):

私は以下のようにブロックの構文を使用するrender文を調整すると、ここではすごみがでキックです:。ERB

# template.html.erb 
This is the index template. 
<%= render :layout => 'form3' do %> 
    <b>meh</b> 
    <%= text_field_tag 'name' %> 
<% end %> 

# _layout.html.erb 
<%= form_tag do %> 
    <div class="something"> 
     <%= yield %> 
    </div> 
<% end %> 

HAML

# template.html.haml 
This is the index template. 
=render :layout => 'form1' do 
    %b meh 
    =text_field_tag 'name' 

# _layout.html.haml 
=form_tag do 
    .something 
     =yield 

私はERBのバージョンでレンダリング上記と同じを得るが、HAMLコード出力:

This is the index template. 
<b>meh</b> 
<input id="name" name="name" type="text" /> 
<form> 
    <div class='something'></div> 
</form> 

HAMLは何とかに渡されたブロックを尊重していないかのようにそれはありますそれ。 HAMLの文書によると、インデントに基づいてオートクローズするブロックをサポートしているので、それは問題ではないと思われます。また、彼らの文書では、自分自身のrenderメソッドの定義を見ました。それはレールの(erbの?)renderメソッドと同じインターフェイスに同行するために適切に実装されていない可能性がありますか?

これは本当にメソッドインタフェースの矛盾である場合、HAMLで問題を開くことを正当化するかどうか?

はちょうどそれはまた、私は3.1.2に3.0.9とHAMLに私のレールのアプリをアップグレードしたときに、私はこの変更に気づいていることは注目に値しますhttps://github.com/iamvery/haml-weirdness

で挙動を示す例アプリを追加しました。 hamlを3.0.24にしておけば、はレール3.0.9 ...

答えて

2

はい私は同じ問題を抱えています。 https://github.com/nex3/haml/issues/412
nex3のgithubアカウントにissue_412ブランチがありますが、完全ではありません。 あなたはhamlを修正するのに狙いを定めることができました。私は3.0.7のレールに戻ることにしました。

+0

私は同じ問題があります。 – Lichtamberg

+1

これはHAML 3.1.3で修正されているようです! – Iamvery

関連する問題