Попытка импортировать HTML из помощника, но Rails его не любит - PullRequest
0 голосов
/ 02 сентября 2018

У меня в основном есть форма, которая отправляет удаленный запрос GET, который затем отображает модальное. У меня есть несколько разных действий, которые могут использовать одну и ту же модель, поэтому я просто пытаюсь использовать помощник и jQuery для отображения разных данных, в зависимости от того, что отображается.

Вот с чем я имею дело. Это мой файл add_users.js.erb (который вызывается после удаленного запроса GET):

$('.modal-footer').html("<%= import_users_html %>");

Вот как выглядит помощник:

def import_users_html
    html = link_to '<i class="fa fa-download"></i> Import Users'.html_safe, '#', remote: :true, class: "btn btn-success btn-sm"
    return html
end

Однако, когда он возвращает HTML, он не отображается в разделе <div class="modal-footer". Если я заменим этот import_users_html на «Hello World», он будет работать отлично.

Где-то не нравятся результаты html. Вот что на самом деле составляет переменная html до ее возвращения в представление add_users.js.erb:

[2] pry(#<#<Class:0x00007f3bbe257050>>)> puts html
<a class="btn btn-success btn-sm" data-remote="true" href="#"><i class="fa fa-download"></i> Import Users</a>

Я пробовал случайные вещи, такие как html_safe, raw, и, похоже, ничего из этого не работает по какой-то странной причине.

** РЕДАКТИРОВАТЬ **

Итак, я понял, что это потому, что link_to в конечном итоге преобразует ссылку, чтобы включить двойные кавычки, что я и использую в своем add_users.js.erb помощнике, поэтому я думаю, что это конфликтует.

1 Ответ

0 голосов
/ 02 сентября 2018

В вашем коде JavaScript попробуйте что-то вроде:

$('.modal-footer').html("<%= j(import_users_html) %>");

j - это псевдоним escape_javascript, который позаботится о конфликтах ваших кавычек.

https://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

Экранирует возврат каретки и одинарные и двойные кавычки для сегментов JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...