Hello everyone,
This week, I will be showing you how to write subdomains in your routes.rb file.
I was working on an app recently and was thinking of the best way to use the same server to serve different type of users and I discovered how some apps do this.
They use subdomains.
The main domain will be for marketing purposes or for the landing page and other necessary information while subdomains will be created for the different categories of users or products you might want to use.
Let's use google as an example. google.com
points you to the search engine.
- For the mail, you need to use the
mail.google.com
- For docs, slides, sheets or form, you have
docs.google.com
- For drive, you have
drive.google.com
etc
For this post, we will build a simple route file with 2 subdomain: admin and platform. Admin
subdomain will serve admin users while platform
subdomain will be used by the apps main users.
To define a subdomain, you use constraints.
# routes.rb
root "home#index"
constraints subdomain: "admin" do
get "/" => "dashboard#index"
end
constraints subdomain: "platform" do
get "/" => "platform#index"
end
From the above, we define a root path on the domain and defined two root paths for our different subdomain.
To reference this new path for a redirect
or link_to
, you just simple need to pass the subdomain to root_url
and rails takes it up from there. Using root_path
won't work here because it returns a relative path and not an actually path where the subdomain can be included.
# redirects
redirect_to root_url(subdomain: "admin")
redirect_to root_url(subdomain: "platform")
# link_to
link_to 'Dashboard', root_url(subdomain: "admin")
link_to 'Home', root_url(subdomain: "platform")
That's it for this week. Leave questions and comments below.
Until next week.
Top comments (3)
hello, thanks for the tutorial but am having some issues with this.
I start ruby on rails about 6 months ago so i don't know much but i discovered one can just type in anything before the localhost and it will work the same way.
eg. hi.localhost:300 is same as localhost:300
and following this tutorial i noticed that when i navigate to admin.localhost:300/dashboard navigatiting to platform from admin url turns platform.admin.localhost:300/platform and am kinda confused.
i mad a navigation link in my application template
<%= link_to 'Dashboard', root_url(subdomain: "admin") %> |
<%= link_to 'Home', root_url(subdomain: "platform") %>
and my routes
root "home#index"
constraints subdomain: "admin" do
get "/" => "dashboard#index"
end
constraints subdomain: "platform" do
get "/" => "platform#index"
end
Note: am using rails 6.1.4
don't know if there a fix to that.
Wow, this is cool stuff. Thanks, Mbonu !!
Thank you for catching that. I have made the update