2010-09-23 119 views
2

我想使用jQuery ajax方法$ .get来访问rails中的restful路由。像这样的东西(请记住,这是在HAML模板,我可以用串插完成):如何在jQuery中使用rails路径助手?

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

在片段上方#{steps_path(N)}插值到URL "\steps\N"N是具有单选按钮的值被改变了。

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

我想出了一些解决这个问题的其他方法,但没有一个允许我使用Rails路由帮助器或字符串插值,而且我很喜欢这样做。

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

回答

0

你可以使用这样的事情:

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

,它允许你通过JS获取数据。

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

而你是对的,你是处理这个问题的完整方法,可能是有缺陷的。更好(恕我直言)使用JS和建立一个路线结构,使您可以编写您的JS代码,而不是试图拉动路线助手进入混合。你不能以你想要的方式使用来自JS的路由助手。

+0

如果参数未被传递,路由帮助程序会在路径中放置一个默认值(即:edit_step_path yield/steps/1/edit,其中edit_step_path(12)产生/ steps/12/edit。 id这个参数可以工作 – rswolff 2010-09-23 04:18:26

0

为什么不这样做

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

I.E.使单选按钮的值为您要提交的URL?

Nimai

+0

我的代码可能有点不明白,我没有证明读过它,但是你得到了一般想法。 – nimms 2010-09-23 04:30:32

0

您可以通过一个“神奇”的令牌ID,然后用javascript与真实ID更换令牌。 喜欢的东西:

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

这里假设你有一个包含的单选按钮轨道ID的data-rails-id属性。 当然,这种技术不适用于多态url助手。