格式js的Rails代码不起作用

我正在尝试实现一个复杂的任务,并遇到一个问题,从format.js调用时,我的JS代码format.js

我有这样代码的链接: = link_to new_user_support_letter_path, {:id => 'contact-us', :remote => true }

在我的user_support_letters_controller.rb

  def new @letter = UserSupportLetter.new respond_to do |format| format.js {} format.html end end 

new.js.erb

alert("rrr");

所以,当我点击链接时没有任何反应。

单击链接的有意义的日志:

 I, [2016-10-19T21:47:41.130608 #1] INFO -- : Started GET "/user_support_letters/new" for 172.18.0.6 at 2016-10-19 21:47:41 +0000 I, [2016-10-19T21:47:41.150411 #1] INFO -- : Processing by UserSupportLettersController#new as JS I, [2016-10-19T21:47:41.269853 #1] INFO -- : Rendered user_support_letters/new.js.erb within layouts/application (0.1ms) I, [2016-10-19T21:47:41.344629 #1] INFO -- : Rendered application/_support_email.slim (0.1ms) ... 

谁能说出我做错了什么? 感谢名单!

要使其工作,您需要将layout设置为false并声明您正在使用的content_type。

据我所知/已经读过,这是rails中的标准行为。 这是一篇类似的post,讨论了它与bug日志的链接。 https://stackoverflow.com/a/1170121/3366016

将控制器操作更改为:

  def new @letter = UserSupportLetter.new respond_to do |format| format.js { render layout: false, content_type: 'text/javascript' } format.html end end 

默认情况下,它会尝试加载给定内容类型的当前布局。 对于JS来说,通常很聪明,知道不加载布局。 通过设置false,您将禁用布局,并告诉它在没有布局的情况下进行渲染。

看起来如果你使用某种forms的模板,它会稍微混淆请求。 这个答案似乎在评论中确定了苗条模板的具体工作。 这个答案描述了另一种解决方案,基本上使用默认布局设置 有了这个,Rails似乎知道如何处理JS请求。