我想在路线约束失败时重定向到另一个网址
Route.rb
匹配'/ u'=> 'user#signin',:constraints => BlacklistDomain
blacklist_domain.rb
class BlacklistDomain
BANNED_DOMAINS = ['domain1.com', 'domain2.com']
def matches?(request)
if BANNED_DOMAINS.include?(request.host)
## I WANT TO REDIRECT HERE WHEN THE CONDITION FAILS
else
return true
end
end
end
答案 0 :(得分:7)
由于Rails路由是按顺序执行的,因此您可以通过以下方式模拟条件登录:
# config/routes.rb
match '/u' => 'controller#action', :constraints => BlacklistDomain.new
match '/u' => 'user#signin'
第一行检查是否满足约束的条件(即,请求是否来自列入黑名单的域)。如果满足约束,请求将路由到controller#action
(当然,替换)。
如果约束条件失败(即请求未列入黑名单),请求将被路由到user#signing
。
因为在您的路由中有效地处理了这个条件逻辑,所以可以简化约束代码:
# blacklist_domain.rb
class BlacklistDomain
BANNED_DOMAINS = ['domain1.com', 'domain2.com']
def matches?(request)
if BANNED_DOMAINS.include?(request.host)
return true
end
end
end