ruby代码显示为文本而不是在js.erb文件中执行

时间:2014-10-13 05:54:54

标签: javascript ruby-on-rails escaping

我正在尝试使用AJAX调用查找并替换一些HTML代码。

我的.js.erb文件中的以下代码成功执行并显示名为“edit unit”的部分视图,其中包含资源“@units [0]”。

$("#edit_unit").replaceWith( "<%= escape_javascript(sync partial: 'edit_unit', resource: @units[0]) %>" );

但是,当我尝试完成同样的事情,但在rails控制器中定义一个字符串并将其传递给我的.js.erb文件时,它没有正确执行,即

在我的rails控制器中:

@string = "sync partial: 'edit_unit', resource: @units[0]"

在我的.js.erb文件中:

$("#edit_unit").replaceWith( "<%= escape_javascript(@string) %>" );

当我这样做时,字符串在页面上显示为文本,而不是执行和显示局部视图。

为什么会这样?

更新

Eval似乎成功执行了字符串。但是,当我循环遍历多个字符串时,它似乎不起作用。

$("#edit_delivery_unit_div").replaceWith(

    <% @array.each do |string| %>
        '<%= escape_javascript(eval(string)) %>'
    <% end %>

)

这不会返回任何错误,但也不会显示部分视图。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

无法执行字符串,您可以使用eval来实现此目的,试试这个

$("#edit_unit").replaceWith( "<%= escape_javascript(eval(@string)) %>" );

但是,在您提供对系统的完全访问权限时,请谨慎使用此功能