0

我有一个视图,用户可以在其中观察数据库中的部分对象:

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

我只是想知道是否有更好的方法来传递这个 ids-list,因为它可能很长而且我不确定这个链接没有任何限制。

4

1 回答 1

2

首先,URL 的长度有 2000 个字符左右的限制。(请参阅URL 的最大长度是多少?)因此您不能以这种方式传递太多 id。

其次,GET 请求不像 POST 请求那样不受跨站点请求伪造的保护。

所以我认为更好的解决方案可能是创建一个表单并使用隐藏的 INPUT 标签保留 ID。

顺便说一句,您可以一键删除对象,而不是一一删除对象:YourModel.delete_all(id: params[:ids])

于 2012-11-13T12:20:38.043 回答