Синтаксис Rails для комментариев в шаблонах: эта ошибка понятна? - PullRequest
1 голос
/ 18 января 2010

Использование 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>

Я обнаружил, что теги

и опущены в выводе, то есть результирующий HTML равен
<ul> 1 2 3 4 5 </ul>

Однако я могу решить эту проблему, исправив _foo.rhtml, чтобы устранить пробел между <% и #, так что теперь партиал читает: </p>

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

Мой вопрос: что здесь происходит? Например, <% # comment%> просто неверный синтаксис для включения комментариев в шаблон? Или это проблема более тонкая?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 18 января 2010

Это странная ошибка, но <%# - это правильный синтаксис комментария (без пробелов).То же самое и с другими опциями:

  1. <%= вывод на печать
  2. <%- не ставить разрыв строки перед этим блоком
  3. <%# игнорировать этот блок

Ни у одного из них не должно быть пробелов между <% и дополнительным символом.

1 голос
/ 18 января 2010

Я сам не провел тест, но у меня сложилось впечатление, что код должен генерировать это:

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

Какой недопустимый HTML. Firefox имеет тенденцию отбрасывать его перед тем, как показывать его firebug. Вы просматриваете сгенерированный код через firebug? Если да, я рекомендую вам «Просмотреть / Исходный код», просто чтобы увидеть, что сгенерированный код такой же.

Мое понимание того, что здесь происходит, заключается в том, что # с пробелом перед ним "закомментирует" бит %>, так что на следующей строке вы находитесь "внутри рубина" Это должно было привести к странной ошибке в этом месте. Но это не так, так или иначе это принимается как действительный код рубина:

<li><%= foo %>

Я не знаю, как это могло бы вернуть значение foo: /.

%>, который появляется в этой строке, фактически является тем, который закрывает <% в первой строке. Если я прав, то </li> также должен быть сгенерирован.

Если это не так, то я говорю глупости, поэтому извиняюсь.

0 голосов
/ 26 мая 2010

Я столкнулся именно с этим вчера, когда попытался загрузить код для проекта нового клиента.Интересно, что это происходит на 1.8.7, но не на паре машин, работающих под управлением 1.8.6.Какую версию Ruby вы используете?

...