gpt4 book ai didi

ruby-on-rails - 为不同的用户类型添加子域

转载 作者:行者123 更新时间:2023-12-01 03:47:27 25 4
gpt4 key购买 nike

我对 Rails 很陌生,我的大部分知识都依赖于教程:)

所以,我关注了这个 http://www.railstutorial.org教程并创建了非常好的网站,但现在我遇到了问题。对于我的用户,我的数据库中有一个特殊列,显示他是哪种类型的用户。例如,我有列“学生”,如果用户是学生,则为“真”,如果不是,则为“假”。

现在我想为学生创建一个子域。因此,当学生想要注册或登录时,他将被转移到 www.student.mysite.com 而不是 www.mysite.com。

我怎样才能做到这一点?

谢谢 :)

最佳答案

有很多方法可以做到这一点,特别是您有兴趣查找 multi-tenancy 关于 rails

——

Multi-Tenancy

虽然 Multi-Tenancy 通常是拥有多个数据库/ Assets (每个用户一个)的定义,但是,因为在 rails 中实现它是非常困难的(我们目前正在研究的东西),您可以使用该原则与单个数据栈

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



虽然这与您的问题没有直接关系,但大多数“ Multi-Tenancy ”问题
通常基于“我如何为我的用户创建不同的子域”

——

子域

Rails 上的子域的基础是捕获请求,并将其路由到正确的 Controller 。我们设法使用以下设置实现了这一点:
#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 %>

关于ruby-on-rails - 为不同的用户类型添加子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655501/

25 4 0
文章推荐: r - 使用 R 进行阿拉伯文本挖掘
文章推荐: jquery - fancybox 错误 - 对象 # 没有方法 'undelegate'