是否可以在应用程序内部包含/使用应用程序帮助器方法config/initializers/browser_blocker.rb
?
我正在使用浏览器宝石检测并阻止较旧的非现代浏览器。
Rails.configuration.middleware.use Browser::Middleware do
include ApplicationHelper
redirect_to :controller => 'error', :action => 'browser-upgrade-required' if browser_is_not_supported
end
我目前正在使用的辅助方法:
# test browser version
def browser_is_not_supported
return true unless browser.modern?
return true if browser.chrome? && browser.version.to_i < ENV['BROWSER_BASE_VERSION_GOOGLE'].to_i
return true if browser.firefox? && browser.version.to_i < ENV['BROWSER_BASE_VERSION_FIREFOX'].to_i
return true if browser.safari? && browser.version.to_i < ENV['BROWSER_BASE_VERSION_SAFARI'].to_i
return true if browser.opera? && browser.version.to_i < ENV['BROWSER_BASE_VERSION_OPERA'].to_i
return true if browser.ie? && browser.version.to_i < ENV['BROWSER_BASE_VERSION_MSFT'].to_i
end
这是一种方法:
# lib/browser_util.rb
module BrowserUtil
def self.supported?(browser)
# your code ...
end
end
并将其从 ApplicationHelper 包装起来以在视图中使用
module ApplicationHelper
def is_browser_supported?
BrowserUtil.supported?(browser)
end
end
在中间件中
Rails.configuration.middleware.use Browser::Middleware do
unless BrowserUtil.supported?(browser)
redirect_to :controller => 'error', :action => 'browser-upgrade-required'
end
end
UPDATE:它不需要位于单独的模块中(BrowserUtil)
module ApplicationHelper
def self.foo
"FOO"
end
def foo
ApplicationHelper.foo
end
end
在中间件使用中
ApplicationHelper.foo
在视图中它将使用包含的方法
foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)