我有一个视图,用户可以从数据库中观察部分对象:
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 :(得分:2)
首先,URL的长度限制为大约2000个字符。 (见What is the maximum length of a URL?)所以你不能以这种方式传递太多的ID。
其次,GET请求不受跨站请求伪造保护作为POST请求。
所以我认为一个更好的解决方案是创建一个表单并使用隐藏的INPUT标记保存id。
BTW,您可以通过一次调用删除对象,而不是逐个删除对象:YourModel.delete_all(id: params[:ids])