2014-09-04 66 views
4

添加子域名我非常新的铁轨和我的大多数知识依赖于教程:)针对不同用户类型

于是,我跟着这个http://www.railstutorial.org教程,创造了真正的好网站,但现在我遇到一个问题。对于我的用户,我在我的数据库中有一个特殊的列,显示他是哪种类型的用户。例如,如果用户是学生,我有专栏'学生',如果他不是,那么'真',而'假'。

现在我想为学生创建一个子域名。所以,当学生想要注册或登录时,他会转到www.student.mysite.com而不是www.mysite.com。

我该如何做到这一点?

谢谢:)

回答

2

有许多方法可以做到这一点,特别是你感兴趣的关于查找multi-tenancy到轨

-

多租户

虽然多租户通常是具有多个数据库/资产(每个用户一个)的定义,但是,因为它很难得到这个工作克护栏(这是我们目前正在处理),则可以使用原理与数据

的一个堆叠

有关于如何使用Rails这里实现这个几个教程:

虽然这不是直接关系到你的问题,大部分的 通常基于“多租户”问题,“我怎么了我的用户创建不同的子域”

-

子域

Rails子域的基础是捕获请求并将其路由到正确的控制器。我们已经成功地实现,使用以下设置:

#config/routes.rb 
constraints Subdomain do #-> lib/subdomain.rb & http://railscasts.com/episodes/221-subdomains-in-rails-3 

    #Account 
    namespace :accounts, path: "" do #=> http://[account].domain.com/.... 

     #Index 
     root to: "application#show" 

    end 
end 

#lib/subdomain.rb 
class Subdomain 
    def self.matches?(request) 
    request.subdomain.present? && request.subdomain != 'www' 
    end 
end 

这会给你做以下的能力:

#app/controllers/accounts/application_controller.rb 
class Account::ApplicationController < ActionController::Base 
    before_action :set_account 

    def show 
     #@account set before_action. If not found, raises "not found" exception ;) 
    end 

    private 

    #Params from Subdomain 
    def set_account 
     params[:id] ||= request.subdomains.first unless request.subdomains.blank? 
     @account = Account.find params[:id] 
    end 
end 

理想情况下,我们很乐意在中间件来处理这个问题,但就目前而言,这就是我们所拥有的!

这会给你打电话给你从@account变量需要数据的能力:

#app/views/accounts/application/show.html.erb 
<%= @account.name %> 
+0

谢谢。+1,但我仍然不明白如何根据用户的个人资料将用户重定向到特定的域。所以,如果他是一名学生,我想重定向到student.myapp.com。 – user3304086 2014-09-10 22:32:55