before_filter not cancelling action

Ruby on-RailsBefore Filter

Ruby on-Rails Problem Overview


I'm having trouble getting before filters to work in a Rails app I have recently upgraded from 1.9(?) to 2.3.11. To try and debug it, I have put a before_filter in a controller:

before_filter :false_filter

and the following in application_controller.rb:

def false_filter
  puts "false filter running"
  false
end

I then call the method from either cucumber/webrat or a browser, and while the filter is getting called (I can see the puts outputting the message), the filter chain isn't getting terminated.

I'm wondering if there's some boilerplate code that hasn't been generated. Can anyone suggest where to look?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Nothing pays any attention to a before-filter's return value. If you want to stop processing, you have to render something from your filter or redirect to somewhere else, from the fine guide:

> If a before filter renders or redirects, the action will not run. If there are additional filters scheduled to run after that filter they are also cancelled.

The same text appears in the 5.2.0 guide.

This behavior does make sense, if the filter chain doesn't complete (i.e. stops filtering part way through) then you'd end up calling controller methods with things not set up the way they were expecting them to be and that would just cause pain, suffering, and confusion and that wouldn't be at all friendly or fun.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHenry CollingridgeView Question on Stackoverflow
Solution 1 - Ruby on-Railsmu is too shortView Answer on Stackoverflow