我可以在Ruby on Rails中使用javascript局部语言吗?部分试图在HTML中呈现

时间:2018-09-02 21:49:57

标签: javascript ruby-on-rails ruby

我有一个功能,可以简单地选择当前页面上的所有复选框,创建表单,然后自动提交。

我不想尝试在每个视图上重复相同的完全相同的javascript代码,而是尝试仅使用一个共享的部分。

这是我到目前为止所拥有的:

#views/shared/_delete_multiple_items.js.erb
alert("<%= random_variable %>");

#views/users/index.html.erb
...
<script>
  function deleteMulitpleUsers() {
    <%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>
  }
</script>

如果我正确理解了此错误,看来Rails试图在HTML中呈现部分内容:

  

缺少带有{:locale => [:en]的部分共享/ _delete_multiple_items,   :formats => [:: html] 、: variants => [] 、: handlers => [:raw,:erb,:html,   :builder,:ruby,:coffee,:jbuilder]}。在以下位置搜索:

我尝试将:formats => :js包含在render中,就像这样:

<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World", :formats => :js %>

但是我仍然得到同样的错误。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您是否尝试过在js.erb文件中添加j?

#views/shared/_delete_multiple_items.js.erb
alert("<%= j random_variable %>");

答案 1 :(得分:0)

您收到该错误,因为服务器响应格式是html,而不是javascript。设置响应格式是在控制器中完成的,因此无法将format: :js放入模板中。尝试这些步骤,看看它们是否对您有用。

  1. _delete_multiple_items.js.erb重命名为 _delete_multiple_items.html.erb

  2. alert("<%= random_variable %>");放在<script>标记内

  3. index.html.erb中,删除所有与js相关的代码,然后执行<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>

答案 2 :(得分:0)

更改此:

<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>

对此:

<%= render partial: 'shared/delete_multiple_items', formats: :js, :locals => {:random_variable => "Hello World"} %>

partial:开头告诉Rails查找部分内容,而formats: :js告诉Rails查找js文件(请注意formats不是{{1 }})