before_filter和respond_to格式
在我的Rails应用程序的控制器中,我可以这样做:
before_filter :login_required, :except => :index
但我想不仅根据动作名称而且根据请求的格式应用filter。 换句话说,我想做这样的事情:
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
请记住,您也可以将lambda提取到方法中。 这有助于提高可读性。 它还可以更容易地对多个filter使用相同的检查。
before_filter :login_required, except: :index, unless: :js_request? private def js_request? request.format.js? end
另一种方法,我认为比接受的答案更清晰,是使用带有lambda的if
或unless
选项。 我只是希望将方法名称列为符号,以便使用其他控制器filter进行标准化。 这适用于Rails 3及更高版本。
before_filter :login_required, except: :index, unless: -> { |controller| controller.request.format.js? }