Railsで、before_filterに引数を取るメソッドを指定したい場合があります。
例えば、複数のコントローラで、あるクエリパラメータを使用したフィルタを適用したい、
という場合で、クエリパラメータの名前が違う、といったケースが該当すると思います。
具体的には、次のような場合です。
GET /hoge?uid=:uid GET /users/:iduidをユーザーIDとした場合、上記のURIはともにユーザーIDをパラメータとして期待しています。 前者はparams[:uid]に、後者はparams[:id]にユーザーIDが入る、ということです。
ユーザーIDを使って、何らかのフィルタをかけるとなった時、フィルタメソッドは、
def some_filter(user_id) # do something.. endみたいに書けます。
このメソッドをbefore_filterに指定するにはどうするか、というのがこのエントリの趣旨ですが、 簡単なことでした。
↓を参考にします。
http://stackoverflow.com/questions/5507026/before-filter-with-parameters
先ほどの、GET /hoge?uid=:uid のコントローラに対しては、
class HogeController < ApplicationController before_filter { |c| some_filter(params[:uid]) } : # GET /hoge?uid=:uid def index end : endと書くことができ、一方 GET /users/:id のコントローラに対しては、
class UsersController < ApplicationController before_filter { |c| some_filter(params[:id]) } : # GET /users/:id def show end : endと書けます。
0 件のコメント:
コメントを投稿