1
IはPadrinoのアプリケーションのこのRubyコードを有する:Rubyの `instance_eval`呼び出しをメソッドにどのように抽出できますか?
module Filters
def self.authorize_admin
proc { halt(401) unless current_user.admin? }
end
end
App.controllers :secrets do
before :show, &Filters.authorize_admin
# ...
end
secrets
コントローラはshow
経路上の要求を受信すると、それはauthorize_admin
フィルタを実行します。
私はこのルールではなく、すべてのルートに適用したい場合は、私がこれを書くかもしれません:
before { instance_eval &Filters.authorize_admin }
私はちょうど書くことができるように、代わりにFilters
のメソッドにこれを抽出したいと思います:
before { Filters.only_administrators }
これは正しい方法はありますか?
module Filters
def self.authorize_admin
proc { halt(401) unless current_user.admin? }
end
def self.filter(controller, filter)
filter_method = method(filter.to_sym)
controller.instance_eval &(filter_method.call)
end
end
を、あなたは今、それが好き呼び出す:
私はあなたが 'procのを削除した場合、{}'、あなたが 'instance_evalを&filter_method'使用することができると思います。 –
@maxpleaner他のコントローラでも 'before ...、&...'スタイルを使いたいので、 'proc'を削除できません。しかし、私はそれらの他のコントローラをリファクタリングすることができると思いますか? –