我正在寻找一种简单的方法来将xx.mydomain.com与mydomain.com/resources/xx匹配的所有路由替换为Rails 4。
是否有人有想法轻松地做到这一点,这也适用于嵌套资源?
谢谢,Joris
答案 0 :(得分:1)
您正在寻找的是您路线中的约束,特别是您希望使用一个确定您是否拥有可以访问的子域
如何实现这一目标有很多资源:
最重要的是,您可能需要创建自定义子程序约束,然后您可以使用标准路由结构:
#lib/subdomain.rb
class Subdomain
def self.matches?(request)
if request.subdomain.present? && request.subdomain != 'www'
account = Account.find_by username: request.subdomain
return true if account # -> if account is not found, return false (IE no route)
end
end
end
#config/routes.rb
constraints(Subdomain) do
get "/", to: "controller#action"
resources :posts #-> subdomain.domain.com/posts
...
end
以上是未经测试的 - 我还在Rails' documentation找到了以下内容:
#lib/subdomain.rb
class Subdomain
def initialize
@accounts = Account.all
end
def matches?(request)
if request.subdomain.present? && request.subdomain != 'www'
@accounts.include?(request.subdomain)
end
end
end
#config/routes.rb
constraints: Subdomain.new do
get "/", to: "controller#action"
resources :posts #-> subdomain.domain.com/posts
...
end
答案 1 :(得分:0)
以前我是如何在Rails 3应用程序中完成的:
constraints :subdomain => /ambassador/ do
namespace(:influencer, :path => '/') do
root :to => 'home#index'
match 'home' => 'sweepstakes#index', :as => :influencer_home
resources :sweepstakes
resources :associates
resources :widgets
resources :sessions
resources :reports do
resource :member
end
match 'faq' => 'info#faq'
end
end
请务必将此块放在 routes.rb 文件的顶部,以使其优先。
您当然可以像往常一样将资源嵌套在这里。