Rails 3 UJS - 控制器被link_to:remote调用两次

cha*_*dru 33 jquery ujs ruby-on-rails-3

我有一个奇怪的问题,JQuery正在为link_to方法创建两个AJAX请求.我正在使用JQuery for UJS开发Rails 3应用程序.我有一个切换链接,可以在"关注"和"取消关注"之间切换

我的链接呈现如下:

<span id="follow_link">
  <a href="/tfollow_artist?id=8103103" data-method="post" data-remote="true" id="follow_artist" rel="nofollow">Unfollow</a>
</span>
Run Code Online (Sandbox Code Playgroud)

我的控制器设置如下:

def tfollow_artist
  @artist = Artist.find(params[:id])
  if current_user.following?(@artist) 
    current_user.stop_following(@artist)
  else 
    current_user.follow(@artist)
  end
 end
Run Code Online (Sandbox Code Playgroud)

最终将js呈现为:

 $('#follow_link').html('<%= escape_javascript(render :partial => "follow") %>');
Run Code Online (Sandbox Code Playgroud)

这基本上用相同的URL替换'<span id ="follow_link"> ... </ span>的html内容,只是文本不同.例如,上面将呈现为:

<span id="follow_link">
  <a href="/tfollow_artist?id=8103103" data-method="post" data-remote="true" id="follow_artist" rel="nofollow">Follow</a>
</span>
Run Code Online (Sandbox Code Playgroud)

然而,这在某种程度上导致JQuery发出两个AJAX请求.

任何人都可以看到这里有什么问题吗?

我正在使用'jquery-rails'gem,它正在将最新的jquery-ujs文件复制到我的应用程序中.JQuery版本是1.4.3

Doc*_*ext 26

感谢这个对话框:

https://github.com/rails/jquery-ujs/issues/208

我能够发现jquery和jquery_ujs被包含两次.

我想jquery-rails gem会自动将它们放入application.js,然后我也将它们包含在application.js中.

似乎无论出于什么原因,application.js会自动捆绑app/assets/javascripts /中的所有内容 - 即使我删除了所有要求.

因此,如果您的:remote => true表单已提交两次,请尝试检查application.js.

希望这可以帮助!

更新:我相信这可能与我预先渲染我的资产而不使用摘要有关,所以当我的开发环境动态地从app/assets/application.js中的需求添加html头中的脚本标签时,它还添加一个应该是一个空的动态application.js,除了来自public/assets的静态加载.混乱?是的!


小智 17

我有同样的问题,通过评论这一行修复

\#config.assets.debug = true
Run Code Online (Sandbox Code Playgroud)

在开发模式中

  • 这仍然有效。有人知道他/她的*为什么*吗? (2认同)

Eug*_*ene 5

我有同样的问题.运行以下rake任务解决了我的问题.

rake tmp:clear
rake assets:clean
Run Code Online (Sandbox Code Playgroud)


dte*_*eoh 3

我认为发生的情况是您的 JavaScript 没有阻止浏览器执行链接。因此,您会收到 AJAX 请求,然后收到浏览器请求。

Rails Cast 174 中有对此的解释和解决方案。这里有文字解释,大约向下一页的 3/4。