2009-04-30 8 views

答えて

25

自分でロールする必要があります。これを出発点として試してみてください。

before_filter :login_required, :except => [:index] 

before_filter(:only => :index) do |controller| 
    login_required unless controller.request.format.js? 
end 
+1

ありがとうございました。私はlogin_requiredをcontroller.send(:login_required)に置き換えなければなりませんでした。 before_filter(:only =>:index)do | controller |コントローラ:request.format.js? controller.send(:login_required) end – gdelfino

+0

私が期待していたコードが表示されなかったので、私のコメントを繰り返してください。 login_requiredをcontroller.send(:login_required)に置き換えるだけで済みました。 ありがとうございました。 – gdelfino

+0

gdelfinoのチップで魅力的に働いた – whizcreed

10

私は受け入れ答えよりもきれいだと思うもう一つの方法は、ラムダとifまたはunlessオプションを使用することです。他のコントローラのフィルタで標準化されているので、メソッド名をシンボルとしてリストするのが好きです。これはRails 3以降で動作します。

before_filter :login_required, except: :index, 
    unless: -> { |controller| controller.request.format.js? } 
13

ラムダをメソッドにも抽出できます。これは可読性に役立ちます。また、複数のフィルターで同じチェックを使用するのが簡単になります。

before_filter :login_required, except: :index, unless: :js_request? 

private 

def js_request? 
    request.format.js? 
end 
+1

完璧ですが、私は 'request.format.json? 'を使います。 – inye

関連する問題