Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
512 views
in Technique[技术] by (71.8m points)

inheritance - Skip before_filter in Rails

Names and objects have been simplified for clarity's sake. The basic concept remains the same.

I have three controllers: dog, cat, and horse. These controllers all inherit from the controller animal. In the controller animal, I have a before filter that authenticates a user as such:

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_basic do |name, password|
    name == "foo" && password == "bar"
  end
end

In the show action of dog, I need to have open access to all users (skip the authentication).

If I were to write the authentication separately for dog, I could do something like this:

before_filter :authenticate, :except => :show

But since dog inherits from animal, I do not have access to the controller-specific actions. Adding :except => :show in the animal controller will not only skip authentication for the show action of dog, but also that of cat and horse. This behaviour is not desired.

How can I skip the authentication only for the show action of dog while still inheriting from animal?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

See ActionController::Filters::ClassMethods for more info on filters and inheritance.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...