Metal 文件下的内容
Metal 是请求从路由到 Controller 的中转站。
类方法:
action
use
middleware & middleware_stack
controller_name
实例方法:
dispatch
content_type
content_type=
location
location=
params
params=
status
status=
performed?
response_body=
controller_name
env
url_for
self.action
和 dispatch
为转移到下一站场起到了很大的作用。
# Action Dispatch 转发过来的请求,要先经过层层的 middleware 处理,才能到达指定的 action.
def self.action(name, klass = ActionDispatch::Request)
if middleware_stack.any?
middleware_stack.build(name) do |env|
new.dispatch(name, klass.new(env))
end
else
lambda { |env| new.dispatch(name, klass.new(env)) }
end
end
从堆栈里取 middleware 并处理。
use
方法把 middleware 放入 middleware stack,也很重要。
class PostsController < ApplicationController
use AuthenticationMiddleware, except: [:index, :show]
end
除此之外,需要清楚:
class_attribute :middleware_stack
self.middleware_stack = ActionController::MiddlewareStack.new
最后更新于
这有帮助吗?