没有respond_to就调用.js文件

时间:2012-05-20 06:46:05

标签: javascript ruby-on-rails ajax ruby-on-rails-3

我有一个评级控制器,其创建操作通过Javascript调用。我的评级文件夹中有一个create.js文件。我想为了调用create.js文件你需要这样的东西

respond_to do |format|
    format.js
end

当我删除它时,仍然会调用create.js文件。这是因为create.js是在create动作中调用的(即方法的名称和.js文件匹配)?谢谢!

更新:当缺少format.js时,它找不到DOM的元素。例如,如果我有类似

的东西
$('#id_3').html('<%=escape_javascript render(:partial => 'show') %>');

我可以在终端中看到部分'show'被执行,但它找不到div'id_3',因此部分从未出现在DOM中。任何清晰度都将不胜感激,谢谢

2 个答案:

答案 0 :(得分:2)

Rails魔术!如果您的资源的链接类似于/dogs/1.js,那么respond_to会按照您的想象处理它。尝试调用/ dogs / 1,看看会发生什么。还行吗?现在尝试在format.js之前添加format.html。这应该可以让你很好地了解respond_to的工作原理。

答案 1 :(得分:1)

这就是Rails的工作原理:它呈现与动作同名的视图。

如果您有多个具有相同名称的视图(采用不同的格式),则必须在请求中指定所需的视图,并使用respond_to方法做出相应的响应:

def index
  respond_to do |format|
    format.js { ... }
    format.html { ... }
    ...
  end
end

GET /index.html将呈现index.html.erb文件(假设您正在使用ERB)

GET /index.js将呈现index.js.erb文件