Rails 3.1:使用命名路由的资产管道

12

Rails 3.1.0.rc5

我在启用ERB的Javascript文件中使用命名路由时遇到了麻烦:

# app/assets/javascripts/items.js.erb
$('#start').click(function() {
  $.ajax({
    url : '<%= ajax_items_path %>',
    success : function(result) {
      $('#result').html(result);
    }
  });
});

错误信息如下:

Error compiling asset items.js:
NameError: undefined local variable or method `ajax_items_path' for #<#<Class:0x007fbcb49a7630>:0x007fbcb4ee30b8>
  (in myproject/app/assets/javascripts/items.js.erb)

如果我在视图中直接使用ajax_items_path路由,它可以正常工作。

看起来命名路由在资产管道内不可用。如果是这种情况,有什么解决方法?我真的想避免在我的Javascript中硬编码URL。


2
一个解决方法是在HTML中返回URL,例如作为#start上的数据属性,并从那里提取它。 - numbers1311407
我在Rails 3.1.0中完全遇到了同样的问题。你找到任何解决方案了吗? 谢谢 - Thibault Poncelet
1
Thibault:是的,tristanm的答案对我有用。 - gjb
1个回答

25
一个解决方法是使用你的路由辅助函数,从 Rails.application.routes.url_helpers 中获取,例如:
<%= Rails.application.routes.url_helpers.ajax_items_path %>

我尝试了这个,并得到了a[href="/d/users/sign_in"] - Travis Pessetto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接