Использование кода ruby ​​gem позволяет получить встроенный текст в файле * .html.erb - PullRequest
0 голосов
/ 13 февраля 2012

Я сфокусирован на неправильном слое абстракции, но не могу понять, где.

У меня есть этот файл views / pages / Overview.html.erb

<%= stylesheet_link_tag "cust/coderay"%>
<h1>Overview</h1>
<hr>
Here's my code test:

<%= html = CodeRay.scan("puts 'Hello, world!'", :ruby).div(:line_numbers => :table)%>

<hr>
Back <%=link_to "home", "home"%>.
<hr>
It took <%="%.3f" %(Time.now-@start_time)%> seconds to generate this page.

К моему удивлению, страницы выглядят так:

enter image description here

Когда я просматриваю источник на странице, я получаю:

<!DOCTYPE html>
<html>
<head>
  <title>Dash</title>
  <link href="/assets/application-all.css?body=1" media="all" rel="stylesheet" type="text/css" />
<link href="/assets/all/pages.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/pages.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="SydEiDhSNHuEE6vCfr4rajIksxBbqnm89sddC08msjs=" name="csrf-token" />
</head>
<body>

<h1>Overview</h1>
<hr>
Here's my code test:

&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line-numbers&quot; title=&quot;double click to toggle&quot; ondblclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;

&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;puts &lt;span style=&quot;background-color:hsla(0,100%,50%,0.05)&quot;&gt;&lt;span style=&quot;color:#710&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color:#D20&quot;&gt;Hello, world!&lt;/span&gt;&lt;span style=&quot;color:#710&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;

&lt;/tr&gt;&lt;/table&gt;


<hr>
Back <a href="home">home</a>.
<hr>
It took 0.006 seconds to generate this page.




</body>
</html>

Почему css в квадратных скобках отображается в виде встроенного текста? Как должно выглядеть мое использование coderay здесь?

Большое спасибо -

1 Ответ

1 голос
/ 13 февраля 2012

Rails по умолчанию экранирует ваш HTML в шаблонах ERB. Вам нужно отключить экранирование HTML следующим образом:

<%=raw CodeRay.scan("puts 'Hello, world!'", :ruby).div(:line_numbers => :table) %>

Подробнее на этот вопрос и этих замечаний к выпуску .

...