2011-08-15 84 views
4

我有四個函數,我通過ajax調用傳遞幾個參數。我建立使用javascript其中的一個作爲例子的網址:Rails 3在手動構建的鏈接中將參數傳遞給控制器​​的正確方法是什麼?

function submitMake(year,make){ 
    new Ajax.Request('update_model/'+year+'/'+make, { method: 'get'}); 
} 

在我的routes.rb我必須設置爲接聽的電話發送到正確的控制器四個不同的條目。這裏是一個:

match 'car_infos/update_style/:year/:make/:model', :controller => 'car_infos', :action => 'update_style' 

一切工作正常,但我想知道如果這是一個合法的軌道3的做法嗎?如果不是,我應該如何修改我的路線,以及正確的網址是什麼樣的?

感謝您的任何意見。

回答

4

這很好。

當在js和ruby的邊界工作時,沒有太多可用的語法糖。

+2

+1 「語法糖」,我喜歡它。 – sholsinger

+1

@sholsinger:是的,小心糖尿病! :) – apneadiving

+0

謝謝你只是想確保沒有一些Rails功能,我錯過了使這個更清潔/更容易。 – Xaxum

1

有一個更靈活的解決方案,用於在js和rails之間共享url。通過鏈輪,您可以通過ERB運行您的資產,然後您可以通過這種方式獲得您的網址助手。

例如,你可以寫出一個變量的URL,你的參數硬編碼到你可以在JS中替換的東西。這樣,您可以更改自己的網址,而無需擔心(儘可能多)改變應用中的網址。

如your.js.erb:

<% class << self; include Rails.application.routes.url_helpers; end %> 
var urls = {}; 
urls.make = <%= url_for(:only_path => true, 
         :controller => :car_infos, :action => :update_style, 
         :make => '%make', :year => '%year', :model => '%model').to_json %>; 
// urls.make will be: 'car_infos/update_style/%year/%make/%model' 

function submitMake(year, make, model) { 
    var path = urls.make.replace('%year', year).replace('%make', make).replace('%model', model); 
    new Ajax.Request(path, {method: 'get'}); 
} 
+0

感謝您指出鏈輪。我以前沒有用過,我只是準備了一些。基本上它允許你使用你的.js.erb文件來處理你所有的javascript?所以在我的情況下,我不會有我的JavaScript在application.js但在.js.rjs,因爲我使用原型? – Xaxum

+0

鏈輪將根據擴展名篩選您的資產。使用默認的rails設置,它不理解rjs,所以'.js.rjs'不會做任何事情。你所需要的只是一個帶有'.js.erb'的文件來做我在這裏做的事情。如果我要走這條路線,我會製作一個'urls.js.erb'並導出我想要的網址,寫一些處理網址的功能等。 – jdeseno

相關問題