10

当路由约束失败时,我想重定向到不同的 url

路由.rb

匹配 '/u' => 'user#signin', :constraints => BlacklistDomain

黑名单域名.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
4

1 回答 1

13

因为 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
于 2013-10-29T04:41:07.943 回答