如何在jQuery中使用rails route helpers?

时间:2010-09-23 03:50:08

标签: jquery ruby-on-rails rest

我想使用jQuery ajax方法$ .get来访问rails中的restful路由。这样的事情(请记住这是在haml模板中完成的,我可以使用字符串插值):

$(function(){
  $(':radio').change(function(){
    $.get("#{edit_steps_path(N)}");  
  }
});

在上面的代码段#{steps_path(N)}内插到网址"\steps\N"N是已更改的单选按钮的值。

显然这不起作用,因为在单选按钮可以触发更改事件之前,服务器上会发生字符串插值。显然,我对这个问题的处理方法完全是错误的。

我已经提出了一些解决这个问题的方法,但是没有一个方法可以让我使用Rails路由助手或字符串插值,而且我很想做。

我猜有一种正确的方法来完成我正在寻找的东西,只是不确定它是什么。

3 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

  $(function(){
      $(':radio').change(function(){
        $.get("#{steps_path}/" + $(':radio:checked').val());
      }
    });

允许您通过js获取数据。

然而,这可能不是最好的解决方案。特别是因为你似乎想要做一个POST而不是GET(来自你的问题文本)。

你是对的,你处理这个问题的整个方法可能有缺陷。更好(恕我直言)使用JS并构建一个路由结构,允许您编写JS代码,而不是试图将路由助手搞砸到混合中。你不能以你想要的方式使用JS的路线助手。

答案 1 :(得分:0)

为什么不做类似

的事情
<% steps.each_with_index do |step, n| %>
  <%= radio_button(object_name, method, steps_path(n)) %>
<% end %>

即。将单选按钮的值设为要提交的URL?

Nimai

答案 2 :(得分:0)

你可以传递一个&#34;魔法&#34;令牌为id,然后使用javascript替换真实id的令牌。 类似的东西:

$(function(){
  $(':radio').change(function(){
    $.get("#{edit_steps_path('__id__')}".replace('__id__',$(this).data('rails-id));
  }
});

这假设您有一个data-rails-id属性,其中包含单选按钮上的rails id。 当然,这种技术不适用于多态url助手。