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 リクエストのようにクロスサイト リクエスト フォージェリから保護されません。

したがって、より良い解決策は、フォームを作成し、ID を非表示の INPUT タグで保持することだと思います。

ところで、オブジェクトを 1 つずつ削除する代わりに、1 回の呼び出しでオブジェクトを削除できます。YourModel.delete_all(id: params[:ids])

于 2012-11-13T12:20:38.043 に答える