2016-10-24 4 views
2

У меня есть существующий сайт с шаблоном:Rails маршрутизации все поддомены с групповым символом

CappedIn.com/users/1

Я хотел бы мои пользователи также могут быть доступны через

MyUsername.CappedIn.com

Я хотел бы быть в состоянии поймать все поддомены, а затем выполнить быстрый поиск в контроллере и отобразить профиль пользователя. Полученный URL-адрес будет, конечно, MyUsername.CappedIn.com

Возможно ли это? Как это можно достичь?

Обратите внимание, что я сейчас на Rails 3.2, но буду мигрировать в Rails 5. Таким образом, решение Rails 5 было бы лучше.

ответ

1

Чтобы посмотреть экземпляр в User модели из подобласти текущего URI, вы могли бы сделать что-то похожее на следующее (простой, сырой, например, на цели):

Посмотрите пользователя с помощью крючка в ApplicationController

class ApplicationController < ActionController::Base 
    # ... 
    before_action :lookup_user_from_subdomain 
    # ... 

    def lookup_user_from_subdomain 
    @subdomain_user = User.where(username: request.subdomain).first 
    # Do stuff with @subdomain_user, and/or handle User not found, 
    # check that subdomain != 'www' if you need to, etc. 
    end 

    # ... 
end 

Гелашвили из UserController

class UserController < ApplicationController 
    # ... 
    def subdomain_profile 
    @profile = @subdomain_user.profile if @subdomain_user.present? 

    # You may want to check for request.xhr? and handle 
    # respnding to js/json here, for ajax requests to display 
    # profile in a sidebar or somewhere else besides a profile 
    # page. 
    # Or, just simply render the profile of the subdomain-user here. 
    end 

    # ... 
end 

Примечание. Я использовал before_action, что является более новым (Rails ~ 5) соглашением, а не before_filter.

Вы можете увидеть больше информации о request объекта here, и больше на ActionController фильтры here.

Отъезд this Railscast on subdomains для получения дополнительной информации и, в частности, домена http://lvh.me:3000/ для проверки субдоменов в локальном dev.

Если вы планируете выполнять некоторые сверхмощные вещи, такие как данные с доступными областями для каждого поддомена (пользователя) или использовать разные базы данных для каждого пользователя, или каким-то образом обрабатывать приложение по-разному для каждого пользователя, посмотрите Acts as Tenant gem , Он управляет несколькими арендаторами в приложении Rails и имеет встроенную поддержку для загрузки пользователей или учетных записей через субдомены.

+0

спасибо. Есть ли что-то, что мне нужно сделать, чтобы убедиться, что весь поддомен попал в мое приложение Rails? – slindsey3000

+0

@ slindsey3000 его вероятность того, что есть, но, вероятно, что-то, что имеет место в настройках вашего DNS или веб-сервера. – Todd

Смежные вопросы