我想使用jQuery ajax方法$ .get来访问rails中的restful路由。这样的事情(请记住这是在haml模板中完成的,我可以使用字符串插值):
$(function(){
$(':radio').change(function(){
$.get("#{edit_steps_path(N)}");
}
});
在上面的代码段#{steps_path(N)}
内插到网址"\steps\N"
,N
是已更改的单选按钮的值。
显然这不起作用,因为在单选按钮可以触发更改事件之前,服务器上会发生字符串插值。显然,我对这个问题的处理方法完全是错误的。
我已经提出了一些解决这个问题的方法,但是没有一个方法可以让我使用Rails路由助手或字符串插值,而且我很想做。
我猜有一种正确的方法来完成我正在寻找的东西,只是不确定它是什么。
答案 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助手。