Обновление до Rails 3: ошибка <% = if expression%> - PullRequest
1 голос
/ 09 мая 2011

Хорошо, просматривая некоторые подкасты, я видел, что в Rails 3 нам нужно использовать тег <%= %> сейчас, когда мы раньше этого не делали. Однако, просто поместив это в мой файл application.html.erb:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
<body>  
  <%= if true %>
true        
  <% end %>
</body>
</html>

не отображает 'true', как я ожидал. Вместо этого я получаю ошибку:

Showing /app/views/layouts/application.html.erb where line #5 raised:

/app/views/layouts/application.html.erb:5: syntax error, unexpected ')', expecting keyword_then or ';' or '\n'
  ');@output_buffer.append= ( if true );@output_buffer.safe_concat('
                                       ^
/app/views/layouts/application.html.erb:7: syntax error, unexpected keyword_end, expecting ')'
');   end 
         ^
/app/views/layouts/application.html.erb:10: syntax error, unexpected keyword_ensure, expecting ')'
/app/views/layouts/application.html.erb:12: syntax error, unexpected keyword_end, expecting ')'
Extracted source (around line #5):

2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3: <head></head>
4: <body>  
5:   <%= if true %>
6: true        
7:   <% end %>
8: </body>

возвращение к старому тегу <% %> устраняет эту проблему. Это правильно? Разработчики рельсов решили вернуться к старому тегу или я что-то упустил?

rails -v получает меня: Rails 3.0.5

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 09 мая 2011

Это относится только к некоторым тегам. Например. <% form_for ... %> стало <%= form_for ... %>. В этом случае вы просто используете <% if true %>. Причина в том, что form_for генерирует вывод, поэтому вы используете <%= %>. Простой оператор if не генерирует вывод, поэтому вы используете <% %>. То же самое касается циклов и т. Д., Вы просто продолжаете использовать <% %>.

Это объясняется здесь тоже:

form_for вставит теги формы в вид вокруг содержания в блок, но знак равенства отсутствует теги erb. Это нарушает правило что erb блокирует этот выходной код представление должно использовать <% =%> и имеет сделал это трудно работать с внутренности form_for в предыдущем версии Rails. Из [Рельсы версия 3], однако мы используем знаки равенства здесь, как мы бы с любым другой код erb, который генерирует вывод.

1 голос
/ 09 мая 2011
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
<body>  
  <% if true %>
true        
  <% end %>
</body>
</html>
...