2012-07-03 27 views
26

如何通過導軌中的Get方法傳遞參數數組?目前我的網址loocs這樣的:通過獲取導軌傳遞參數數組

http://localhost:3000/jobs/1017/editing_job_suites/1017/editing_member_jobs/new?ids[]=1025&ids[]=1027 

如何傳遞數組與Get方法,但要避免?ids[]=1025&ids[]=1027一部分。

使用javascript window.open方法發送請求。有沒有任何解決方法可以發送不是ajax Post請求。

+3

請張貼代碼.. – varatis

+0

不能。這是一個巨大的項目。代碼太複雜了。我只需要知道是否有任何方式通過數組傳遞數組與get方法避免URL看起來這樣。 –

+0

'?ids = 1025,1027'可以嗎? – tokland

回答

19

不,GET只能將變量放在url本身上。如果您希望URL更短,則必須POST。這是HTTP的一個 限制 功能,而不是Rails。

+0

或者找到另一種過濾方式,而不使用巨大的數組。 – YuriAlbuquerque

65

如果您沒有更改任何狀態,並且您只想訪問只讀值,則應該堅持使用GET請求。

要向GET請求中的rails發送一個ID數組,只需在最後使用方括號命名變量即可。

//angular snippet 

$http.(method:'GET', 
    ... 
    params: {'channel_id':2, 'product_ids[]': productIds} 
    //where productIds is an array of integers 
    ... 
) 

請勿將您的ID作爲逗號分隔列表連接,只是將它們單獨冗餘傳遞。因此,在URL會是這個樣子:

?channel_id=2&product_ids[]=6900&product_ids[]=6901 

URL編碼它實際上更喜歡這樣的:

?channel_id=2&product_ids%5B%5D=6900&product_ids%5B%5D=6901 

Rails會這樣退了出來分開你。

Parameters: {"channel_id"=>"2", "product_ids"=>["6900", "6901"]} 
+3

使用「product_ids [] = 6900&product_ids [] = 6901」方法 –

+1

傳遞參數列表+1它應該是正確答案! – goodniceweb

+0

被接受的答案對於通過網絡搜索找到此頁面的人沒有幫助,而這一個是,所以我是投票。不過,我們也應該注意到,接受的答案是更具體地回答這個問題的答案,因爲OP表示他已經知道方括號的語法。 – mastazi

6

我最近想這樣做,發現一個稍微不復雜的解決方法,所以有一些複雜性的限制,但也可能更容易實現。不能對安全等說話

如果您將數組值作爲帶分隔符的字符串傳遞,例如

http://example.com/controller?job_ids=2342,2354,25245 

那麼你可以採取的結果和解析回給你想要的東西:

job_ids = params[:job_ids].split(',') 

然後爲所欲爲:

job_ids.each do |job_id| 
     job = Job.find(job_id.to_i) 
    end 

0

@Homan答案是有效的用於使用外部客戶端(例如curl或角度)。在Rails內部的測試用例中,你不應該使用[]。這裏有一個例子:

get get_test_cases_url(**path_params), params: {case_ids: ["NON-9450", "NON-12345", "NON-9361"]} 

這是使用新的格式,其中get_test_cases是路線的名字,你傳遞給所有PARAMS需要構造URL路徑的方法。查詢參數是一個單獨的散列。

僅供參考,如果我使用[]case_ids[],然後代替["NON-9450", "NON-12345", "NON-9361"]我得到它解析爲[["NON-9450"], ["NON-12345"], ["NON-9361"]]