Rails 3.1 escape_javascript работает не так, как ожидалось

#javascript #ajax #ruby-on-rails-3.1

#javascript #ajax #ruby-on-rails-3.1

Вопрос:

У меня есть следующий код:

   def link_to_add_fields(name, f, association)
    new_object = f.object.class.reflect_on_association(association).klass.new
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
      render(association.to_s.singularize   "_fields", :f => builder)
    end
    link_to_function(name, h("add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
  end
  

Когда он запускается, он должен дублировать предыдущее поле формы. Когда я нажимаю на свою ссылку, чтобы добавить новое поле, он просто отображает встроенный HTML (он был полностью экранирован и доступен для просмотра). Я нашел предыдущий вопрос, в котором говорилось, что это проблема с Rails 3.1.0rc2, но я использую текущую версию rails 3.1.0. Поэтому я не уверен, связано ли это с моей конфигурацией или проблема снова появилась в rails.

Ответ №1:

Попробуйте изменить эту строку

 link_to_function(name, h("add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
  

к этому

 link_to_function(name, "add_fields(this, '#{association}', '#{escape_javascript(fields)}')", :remote => true)
  

Я думаю, что * rails 3.1.x автоматически выполняет экранирование

Комментарии:

1. @witharmshigh рад помочь