Special case rendering from filter


#1

I have a special case(does not normally occur) render in a filter.
Because its in a filter, I can’t end execution with a ‘return’ which
would work otherwise. Therefore I get this error:

Can only render or redirect once per action

My code in gist:

class MyController < ApplicationController
before_filter :authenticate

def priviledged_action
redirect_to :action => “vip_room”
end

protected
def authenticate
if params[:password] != “pass”
render :status => 403, :text => “Access denied”
# Things I have tried to end execution here:
# ‘return’ does end execution as simply returns filter
# ‘exit’ causes crash
# I can’t think of a way to use catch/throw
end
end
end

Can anyone please advise?


#2

On Apr 8, 7:59 pm, Zac Z. removed_email_address@domain.invalid wrote:

I have a special case(does not normally occur) render in a filter.
Because its in a filter, I can’t end execution with a ‘return’ which
would work otherwise. Therefore I get this error:

Can only render or redirect once per action

what version of rails are you using ? In rails 2 and above rendering
from a filter should cause the filter chain to halt. in previous
versions you had to return false from your filter.

Fred


#3

Frederick C. wrote:

what version of rails are you using ? In rails 2 and above rendering
from a filter should cause the filter chain to halt. in previous
versions you had to return false from your filter.

You’re right! My semi pseudocode oversimplified my actual code. There’s
a logic that prevents false being returned from the filter.

Thanks mate