Проблема с помощниками блоков и шаблонами JavaScript после обновления Rails 3 - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть приложение, которое я обновляю с 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 в строки и так далее.Кажется, мне не хватает чего-то простого.

Любая помощь будет признательна.

Крис

1 Ответ

1 голос
/ 19 февраля 2011

Я нашел ответ. У меня, видимо, были сырые блоки в неправильном месте. Это изменение исправило это:

<%= content_for :jstemplates do -%>
  <%=raw "var serviceoverride='#{generate_template(customer_form, :serviceoverrides).html_safe}'" %>
  <%=raw "var clientimage='#{generate_template(customer_form, :customer_images).html_safe}'" %>
  <%=raw "var formula='#{generate_template(customer_form, :formulas).html_safe}'" %>
<% end -%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...