#ruby-on-rails #erb
#ruby-on-rails #ошибка
Вопрос:
Я использую Ruby on Rails 3. Я пытался добавить #comment в <% =%> , и оказалось, что это недопустимо … и возникла ошибка… Мой код:
<%= @page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b%>
Кажется, нормально помещать #comment в <% %> без знака равенства в нем. Мой вопрос: почему это?
Кроме того, как вы помещаете комментарий внутрь <% = %>?
Спасибо.
Ответ №1:
#comment
Выполняется до конца строки, но использование =
перезаписывается как вызов функции, например puts()
Если мы перепишем
<%= @page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b%>
как
puts(@page_title || 'Pragmatic Bookshelf' #magic @page_title; a if a is true, else b)
Становится ясно, что закрывающая скобка )
является частью комментария, и поэтому оператор не может быть правильно проанализирован.
Чтобы обойти это, мы можем просто использовать отдельный блок комментариев ERB, например:
<%= @page_title || 'Pragmatic Bookshelf' %><%# magic @page_title; a if a is true, else b%>
В заключение отметим, что использование ||
оператора для объединения нулевых переменных является очень распространенной идиомой Ruby и вообще не нуждается в комментарии. Как говорит Стив Макконнелл в «Code Complete«, комментарии должны объяснять, почему что-то делается, а не как что-то делается.
Комментарии:
1. о, спасибо за последнее замечание. но мой случай в том, что я просто начал изучать rails в течение 1 дня только тогда, когда написал этот код… Я обещаю, что не собираюсь делать этого позже … 🙂
2. другой вопрос: почему <% concat(csrf_meta_tag) #aa%> недопустим, в то время как <% javascript_include_tag:defaults #abc%> допустим?
3. Возможно ли, что
concat
не определено? Обычно он вызывается в строке, такой как"Hello".concat(", world!")
4. это метод в TextHelpers от rails, смотрите на api.rubyonrails.org/classes/ActionView/Helpers /…