在javascript中访问rails路由

kis*_*ore 30 javascript routes ruby-on-rails

任何人都可以解释我如何在javascript中访问rails路由/名称路由?

以下是我尝试过的一些内容 http://github.com/jsierles/js_named_routes.

但没有运气.

Bog*_*iev 40

我正在研究这个问题一段时间,并没有发现任何与Rails 3兼容的实现.

所以决定写我自己的:

https://github.com/railsware/js-routes

  • 这应该被卷入铁轨,正是我想要的. (2认同)

小智 22

kishore我认为这是最简单的方式,只需调用:

Rails.application.routes.url_helpers.*_路径

所以,如果你有你的routes.rb,那么让我们说:

资源:用户

那么你想从一个javascript文件调用索引操作,你做:

$.get('<%= Rails.application.routes.url_helpers.users_path %>', function(data){ ...
Run Code Online (Sandbox Code Playgroud)

考虑到js文件应该有.erb扩展名(或*.js.erb),因此rails知道必须预处理.否则,该文件将按原样提供.


bjg*_*bjg 6

如果我正确理解您的要求,您希望视图中的Javascript代码可以访问指定的路由.如果是这样,那么一种简单的方法是通过模板(ERB,Haml等)呈现您的Javascript代码,然后展开类似以下内容的路由:

ERB:

<script>

  $.get('<%= some_named_route_path %>', function(data) {

  });

</script>
Run Code Online (Sandbox Code Playgroud)

哈姆尔:

:javascript

  $.get('#{ some_named_route_path }', function(data) {

  });
Run Code Online (Sandbox Code Playgroud)

更新:为public/javascripts/案例添加建议

从公共文件夹访问命名路由有点棘手,但至少有两种方式可以想到,这两种方式都不是完全令人满意的,但其中一种或哪一种可能适合您的应用程序

  1. lib/javascripts使用名为like的ERB 创建javascript模板,'*.js.erb'并在部署之前将rake这些模板扩展为public/javascripts(例如,作为Capistrano配方中的一个步骤).缺点是,在扩展模板之前,您的更改不会在网站上实时显示,并且您可能无法通过.erb扩展文件获得正确的语法突出显示javascript
  2. content_for :head块中创建每视图javascript帮助函数,扩展命名路由并使其可用于公共javascript文件中的代码.如果你对命名空间和约定小心,这可能会很好.缺点是调用这些javascript帮助程序的代码与定义它们的代码分离,这可能会使维护者感到困惑或容易被滥用.

在某些观点中:

<% content_for :head do %>
  <script>
    SomeNameSpace.helper_to_some_named_route = function() {
      return '%<= some_named_route_path %>
    };
  </script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在public/application.js(说)

$.get(SomeNameSpace.helper_to_some_named_route(), function(data) {

});
Run Code Online (Sandbox Code Playgroud)