1

Rails 2.3.2 を使用すると、次のようにコメントで始まる部分的な _foo.rhtml があります。

<% # here is a comment %>
<li><%= foo %></li>

ビューからパーシャルを従来の方法でレンダリングすると、たとえば

<% some_numbers = [1, 2, 3, 4, 5] %>
<ul>
<%= render :partial => "foo", :collection => some_numbers %>
</ul>

<li> タグと </li> タグが出力で省略されていることがわかりました。つまり、結果の HTML は次のようになります。

<ul> 1 2 3 4 5 </ul>

ただし、_foo.rhtml を修正して <% と # の間のスペースを削除し、パーシャルが次のようになるようにすることで、この問題を解決できます。

<%# here is a comment %>
<li><%= foo %></li>

私の質問: ここで何が起こっているのですか? たとえば、 <% # comment %> は、テンプレートにコメントを含めるための単純に間違った構文ですか? それとも問題はもっと微妙ですか?

ありがとう!

4

3 に答える 3

3

これは奇妙なバグ<%#ですが、有効なコメント構文 (スペースなし) です。他のオプションと同じです:

  1. <%=出力を印刷する
  2. <%-このブロックの前に改行を入れないでください
  3. <%#このブロックを無視する

<%と追加文字の間にスペースを入れてはなりません。

于 2010-01-18T05:00:58.883 に答える
1

私は自分でテストを行っていませんが、コードがこれを生成するはずだという印象を受けています。

<ul> 1 </li> 2 </li> 3 </li> 4 </li> 5 </li> </ul>

これは無効なHTMLです。Firefoxは、Firebugに表示する前に破棄する傾向があります。生成されたコードをfirebugで閲覧していますか?はいの場合は、生成されたコードが同じであることを確認するために、「表示/ソースコード」をお勧めします。

ここで何が起こるかについての私の理解は、その#前のスペースがビットを「コメントアウト」している%>ので、実際には次の行で「まだルビーの中に」いるということです。ただし、その時点で奇妙なエラーが発生するはずです。しかし、そうではないので、どういうわけかこれは有効なルビーコードとして受け入れられます:

<li><%= foo %>

これがfoo:/の値を返す可能性がある方法がわかりません。

その%>行に表示されるのは、実際には1<%行目を閉じるものです。私が正しければ、</li>も生成されるはずです。

そうでない場合、私はナンセンスを話しているので、お詫びします。

于 2010-01-18T15:07:59.317 に答える
0

昨日、新しいクライアントのプロジェクトのコードをブートストラップしようとしたときに、まさにこれに遭遇しました。興味深いことに、これは 1.8.7 で発生していますが、1.8.6 を実行しているいくつかのマシンでは発生していません。実行している Ruby のバージョンは何ですか?

于 2010-05-26T14:10:14.170 に答える