2012-11-13 20 views
0

我有一個觀點,其中用戶可以從數據庫中觀察對象的部分之間的長長的名單:傳遞兩個requestes

class SyncController < ApplicationController 
    def one 
    @ids = get_ids(...) # ids of objects, which user can see on the view 
    end 
end 

在相同的觀點有一個環節必須由該刪除的數據庫對象@ IDS。所以我需要將這個id列表([10000,100001,100009 ...])傳遞給下一個方法。要做到這一點我已在視圖中創建鏈接:

<%= link_to "mark_as_read", { :controller => 'Sync', :action => "two", :ids => @ids }, :class => "mark_as_read_link", :remote => true %> 

在我遍歷這個列表控制器和刪除對象:

def two 
    params[:ids].each { |id| 
    ..... 
    } 
end 

我只是想知道是否有更好的方式來傳遞這個ID列表,因爲它可能很長,我不確定該鏈接沒有任何限制。

+0

鏈接本身並沒有限制,但會話/餅乾呢。 'params'哈希被包含在會話/ cookie中,所以如果你有一個懶惰的字符串列表,可能有時候你必須增加會話/ cookie的大小。 – MurifoX

回答

2

首先,URL的長度有約2000個字符的限制。 (請參閱What is the maximum length of a URL?)因此,您無法通過太多的ID。

其次,GET請求不受跨請求僞造作爲POST請求的保護。

所以我認爲一個更好的解決方案可能是創建一個窗體並保留帶有隱藏INPUT標籤的ID。

BTW,而不是逐個刪除的對象之一,你可以用一個電話刪除對象:YourModel.delete_all(id: params[:ids])