在我的Rails應用程序控制器,我可以這樣做:的before_filter和respond_to代碼格式
before_filter :login_required, :except => :index
但我想不僅適用基於動作的名字,但對請求的格式過濾器。換句話說,我想這樣做:
before_filter :login_required, :except => {:action => :index, :format => :js}
這可能嗎?
在我的Rails應用程序控制器,我可以這樣做:的before_filter和respond_to代碼格式
before_filter :login_required, :except => :index
但我想不僅適用基於動作的名字,但對請求的格式過濾器。換句話說,我想這樣做:
before_filter :login_required, :except => {:action => :index, :format => :js}
這可能嗎?
你需要推出自己的一點。試試這個作爲一個起點。
before_filter :login_required, :except => [:index]
before_filter(:only => :index) do |controller|
login_required unless controller.request.format.js?
end
的另一種方式,我認爲這是比接受的答案更清潔,是使用if
或unless
選項是lambda。我只想將方法名稱列爲符號,以便與其他控制器過濾器進行標準化。這可以在Rails 3及更高版本中使用。
before_filter :login_required, except: :index,
unless: -> { |controller| controller.request.format.js? }
請記住,您也可以將lambda提取到方法中。這可以幫助提高可讀性。它還可以使在多個過濾器上使用相同的檢查變得更加容易。
before_filter :login_required, except: :index, unless: :js_request?
private
def js_request?
request.format.js?
end
謝謝你的幫助。我只需要使用controller.send替換login_required(:login_required) before_filter(:only =>:index)do | controller | controller.send(:login_required)除非controller.request.format.js? 結束 – gdelfino 2009-05-01 23:31:24
讓我重複一下我的評論,因爲代碼並沒有像我期待的那樣出現。 我只需要用controller.send替換login_required(:login_required) 謝謝。 – gdelfino 2009-05-01 23:34:01