Pro*_*oGM 3 ruby ruby-on-rails multiple-inheritance ruby-on-rails-3
我有两个父控制器,一个用于API,一个用于普通的html页面.
class ApplicationController < ActionController::Base
...
end
class ApiController < ActionController::Metal
include AbstractController::Callbacks
...
end
Run Code Online (Sandbox Code Playgroud)
我想before_filter在两个控制器上分享一些.我试过这样的事情:
class ApplicationController < ActionController::Base
include MyFilters
end
class ApiController < ActionController::Metal
include MyFilters
end
module MyFilters
before_filter :filter1
before_filter :filter2
def filter1
end
def filter2
end
...
end
Run Code Online (Sandbox Code Playgroud)
而且这个:
module MyFilters
def self.included(klass)
klass.before_filter :filter1
klass.before_filter :filter2
end
def filter1
end
def filter2
end
...
end
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下我收到:
undefined method `before_filter' for MyFilters:Module
Run Code Online (Sandbox Code Playgroud)
实现这个的正确方法是什么?
你可以使用一个问题:
# app/controllers/concerns/my_filters.rb
module MyFilters
extend ActiveSupport::Concern
included do
before_filter :filter1
before_filter :filter2
end
def filter1
end
def filter1
end
end
Run Code Online (Sandbox Code Playgroud)
通过include控制器中的标准使用它们:
class ApplicationController < ActionController::Base
include MyFilters
end
class ApiController < ActionController::Metal
include MyFilters
end
Run Code Online (Sandbox Code Playgroud)