2
有没有办法设置config.middleware.use
来排除/忽略/跳过特定的控制器操作?如何在Rails 5中跳过config.middleware.use进行特定的控制器操作
例如,如果我想排除Post#show
控制器操作。
我使用https://github.com/railslove/rack-tracker来测试Google Analytics/Tag Manager。
# Rack Tracker config
config.middleware.use(Rack::Tracker) do
handler :google_tag_manager, { container: ENV['GTM_CONTAINER_ID'] }
end
我以为我可以使用这样一个条件:
# Rack Tracker config
config.middleware.use(Rack::Tracker) do
handler :google_tag_manager, { container: ENV['GTM_CONTAINER_ID'] } if app.route != ApplicationController::PostController.show
end
任何帮助深表感谢。
感谢:但是,您可以通过在其他中间件包装这个中间件,像这样绕过此:
,然后。有关.match方法的问题,这是否与通过路径的Post#show动作相匹配,这是如何工作的?所以如果帖子路径是“posts/hello-world /”,这将匹配?尝试了解如果env ['REQUEST_PATH']。匹配(/ \/posts \/show \ /?/)如何工作。再次感谢 –
是的,.match使用正则表达式来分析传入请求的路径。我选择/ posts/show /作为通用路径,因为我不知道你的routes.rb文件是什么样的。如果你的帖子位于路径/ posts/name-of-post,那么我的正则表达式将不起作用。尝试用它替换它:'/ \/posts \/[\ w' - ] + \ /?/' – eiko
嗨@eiko。我终于得到了我想要的正则表达式(通过Rails控制台进行测试),但在启动应用程序时出现错误:#的undefined方法'handler',与tracker.handler:google_tag_manager有关, {container:ENV ['GTM_CONTAINER_ID']}。在中间件调用方法中运行Rack Tracker方面有什么缺点?再次感谢 –