2010-09-23 57 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助手。