首页 > 解决方案 > 尝试从帮助程序导入 HTML,但 Rails 不喜欢它

问题描述

我基本上有一个提交远程 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助手中使用的,所以我猜它是冲突的。

标签: javascriptruby-on-rails

解决方案


在您的 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 段转义回车和单引号和双引号。


推荐阅读