2

私が次のようなことをするとき:

<%= c.title %>

Railsはそれを次のようにレンダリングします:

"
        Title
    "

文字列をタグでラップした場合、この動作は同じではありません。Railsがこのように動作する理由を誰かに説明してもらえますか?

アップデート

Githubのリポジトリリンク

4

4 に答える 4

1

これは、RailsではなくERBと関係があります。テンプレートが処理されると、出力ERBタグ(<%= %>)から出力バッファーに値が出力され、他のコードが実行されるだけです。

他のすべては手つかずのままです。ERBタグの前後の空白は変更されていません。あなたができることのほとんどは-、タグで空白の一部を取り除くために使用することです。

<!-- -->
<% for i in 1..10 %>
  <%= i -%>
<% end %>
<!-- -->

出力します

<!-- foo -->
  1  2  3  4  5  6  7  8  9  10<!-- foo -->

各数字の前にまだ表示されている2つのスペースに注意してください。その空白を削除すると、1つの長い数字のように見えます。

これをと比較してください

<% for i in 1..10 %>
  <%= i %>
<% end %>

出力します

<!-- -->
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
<!-- -->

コンテキストメニューから[ソースの表示]を選択した後のテストページからの出力は次のとおりです。

<!DOCTYPE html>
<html>
<head>
  <title>Testapp</title>
  <link href="/assets/application-1b13569e9620782f423d4cd3ce931750.css" media="all" rel="stylesheet" type="text/css" />
  <script src="/assets/application-9a717ea62eac3463d689b2ba0a4e85b4.js" type="text/javascript"></script>
  <meta content="authenticity_token" name="csrf-param" />
<meta content="/hfgtJZWzxaQ2d7txQMAt2b+21MWSTYcf6/2F7Pei1k=" name="csrf-token" />
</head>
<body>

<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
What&#x27;s wrong with me?

<!-- -->What&#x27;s wrong with me surrounded by html commet<!-- -->


</body>
</html>
于 2013-02-25T13:34:41.273 に答える
0

レイアウトファイルまたはこのビューをレンダリングする別のファイルにインデントが含まれている可能性があります。

application.html.erbは次のようになります。

<html>
  <head>...</head>
  <body>
    <%= yield %> <!-- Some whitespaces at the beginning of this line -->
  </body>
</html>

Railsは、<%=%>タグをその中の式の値に置き換えるだけで、それ以上のものはありません。

于 2013-02-25T13:17:24.997 に答える
0

問題はわかりません。レンダリングされたHTMLは次のとおりです。

<!DOCTYPE html>
<html>
<head>
  <title>Testapp</title>
  <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" />
<link href="/assets/home.css?body=1" media="all" rel="stylesheet" type="text/css" />
  <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/home.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
  <meta content="authenticity_token" name="csrf-param" />
<meta content="cOfMPm5S/tCHCEHkeRTeQTITAiz800s+3Q4ZgNWCNlY=" name="csrf-token" />
</head>
<body>

<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
What&#x27;s wrong with me?


</body>
</html>

関連するレイアウトセクション:

<body>

<%= yield %>

</body>
于 2013-02-25T13:43:31.750 に答える
0

私はあなたと同じ問題を抱えています!

私にとっての解決策は、ファイルのエンコーディングをからに変更することUTF-8ですUTF-8 without BOM

私はシナトラを使用しています、あなたと共有してうれしいです!

于 2013-09-08T11:47:14.263 に答える