У меня есть приложение, которое я обновляю с Rails 2.3 до Rails 3, которое использует комбинацию помощников и шаблонов JavaScript, которые не работают после обновления.У меня есть следующий код в частичном представлении:
<%= content_for :jstemplates do -%>
<%= "var serviceoverride='#{generate_template(customer_form, :serviceoverrides).html_safe}'" %>
<%= "var clientimage='#{generate_template(customer_form, :customer_images).html_safe}'" %>
<%= "var formula='#{generate_template(customer_form, :formulas).html_safe}'" %>
<% end -%>
, который вызывает помощник generate_template:
def generate_template(form_builder, method, options = {})
escape_javascript generate_html(form_builder, method, options)
end
def generate_html(form_builder, method, options = {})
options[:object] ||= form_builder.object.class.reflect_on_association(method).klass.new
options[:partial] ||= method.to_s.singularize
options[:form_builder_local] ||= :f
form_builder.fields_for(method, options[:object], :child_index => 'NEW_RECORD') do |f|
render(:partial => options[:partial], :locals => { options[:form_builder_local] => f })
end
end
И частичное представление визуализируется из одного из стандартных представлений контроллера.Проблема в том, что вывод JavaScript на отображаемой странице всегда экранирован HTML и, таким образом, напрямую выводится на странице.Это работало правильно в Rails 2.3.x и, очевидно, ломалось в Rails 3, я подозреваю, с изменением в поведении <%%> помощников стиля блока.
Моя проблема в том, что я не могу заставить jstemplates отображать без экранирования.Я рассмотрел изменения в помощниках по стилю блоков и попытался убедиться, что все блоки, генерирующие контент, используют <% =%>, используют функцию <% = raw%>, добавляют .html_safe в строки и так далее.Кажется, мне не хватает чего-то простого.
Любая помощь будет признательна.
Крис