我很好奇我们如何为每个模型实例创建不同的URL。
例如
如果我有一个模型学校,它具有许多相关的模型,例如部门,班级,学生等。现在,我想要的是每当用户注册一所新学校时,它应该有自己的URL。 [ 新学校表格要求用户提供学校的URL和名称 ]
例如
www.school1.com/classes/1
OR
www.school2.com/students/2
答案 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应用程序默认将使用的端口。)