我不想创建2个Rails应用程序,而是希望使用路径约束来隔离这两个应用程序。
我有一个博客和帮助部分:
class BlogHostContraint
def self.matches?(request)
request.subdomain = 'blog'
end
end
class HelpHostContraint
def self.matches?(request)
request.subdomain = 'help'
end
end
我想确保BlogConstraint匹配时我的博客的所有路线都是可见的,博客约束也是如此。
我的意思是,如果我在博客子域中,如果我在URL中添加路由,它不应该呈现或与帮助子域路由的任何路由冲突。
Rails.application.routes.draw.do
# blog
get '/' => 'blog#index', constraints: BlogHostContraint
..
# help
get '/' => 'help#index', constraints: HelpHostConstraint
end
我知道如何使用约束,但只能使用单一路线或资源路线,如:
资源:用户,约束:SomeConstraintHere
如何将一堆路由与一个constain组合在一起,如:
BlogConstraint do
get '..'
get '...'
post '...'
end
这可能吗?
我必须这样做的原因之一是我希望生成好的URLS,从每个区域博客的根目录开始并提供帮助。
我不想要:
help.example.com/help/index help.example.com/help/page/1
我想:
help.example.com/
help.example.com/page/1 # help_controller#page
和博客一样可能:
blog.example.com/
blog.example.com/page/1 # blog_controller#page
如果它再次拥有不错的网址,我不想要其他建议。
答案 0 :(得分:3)
您可以将其传递给constraints
块:
constraints BlogConstraint do
get '..'
get '...'
post '...'
end
我还认为您的matches?
实施不正确。那些应该返回一个布尔值,而你将返回一个赋值。
class BlogHostContraint
def self.matches?(request)
# Use a comparison operator instead of an assignment operator.
request.subdomain == 'blog'
end
end