如何在Rails应用中为每个Model实例使用不同的URL

时间:2018-09-17 09:25:18

标签: ruby-on-rails ruby url routes

我很好奇我们如何为每个模型实例创建不同的URL。

例如

如果我有一个模型学校,它具有许多相关的模型,例如部门,班级,学生等。现在,我想要的是每当用户注册一所新学校时,它应该有自己的URL。 [ 新学校表格要求用户提供学校的URL和名称 ]

例如

www.school1.com/classes/1

OR

www.school2.com/students/2

1 个答案:

答案 0 :(得分:1)

执行自定义域会有些困难,因为您需要手动管理域和DNS。但是,这是可能的。您将设置多个域,并将它们全部指向您的应用程序。然后,在您的控制器中,您将检查哪个学校与request.host相匹配。

一个更简单的解决方案是为每个School设置一个子域。不需要自定义配置,本文对此进行了很好的概述:https://mythoughts.io/managing-dynamic-domains-with-rails-b6ab1040dc8c

我希望这有助于回答您的问题,


更新以提供特定的实施详细信息:

在您的School对象上,我将添加一个字符串类型的domain属性。应该对它的唯一性和存在性进行验证:

# Within School.rb:
validates :domain, presence: true, uniqueness: true

接下来,在您的ApplicationController中,实现一个before_action查找,以根据请求的URL查找School。格式为school1.com或school2.com。请注意,如果找不到学校,则使用!将自动引发404错误。

before_action :find_school

private

def find_school
  @school = School.find_by_domain!(request.host)
end 

要在本地进行测试,可以使用以下命令编辑主机文件:

sudo nano /etc/hosts

添加以下几行:

127.0.0.1 school1.com
127.0.0.1 school2.com

然后,您可以使用school1.com:3000和school2.com:3000通过网络浏览器访问您的应用。 (您需要使用端口3000,因为这是Rails应用程序默认将使用的端口。)