我有一个评级控制器,其创建操作通过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中。任何清晰度都将不胜感激,谢谢
答案 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文件