Вы говорите, что делаете это со своими взглядами, верно?
<%= javascript { "alert('hurray');" } %>
Но чтобы content_tag(&block)
работал, вы должны назвать javascript
способом content_tag
, предназначенным для использования в представлениях, а именно:
<% javascript do %>
alert('hurray');
<% end %>
Поведение
content_tag
отличается в зависимости от того, откуда он вызывается, см. Функцию block_called_from_erb?
в исходном коде. В первом случае эта функция возвращает true
, потому что блок происходит из erb (а затем он concat
ed, вы не хотите!), Во втором возвращает false
(вы воссоздали блок с нуля) и content_tag
просто возвращает содержимое строки, что вам и нужно.
# ./action_view/helpers/javascript_helper.rb
tag = content_tag(:script, javascript_cdata_section(content), html_options.merge(:type => Mime::JS))
if block_called_from_erb?(block)
concat(tag)
else
tag
end