Ruby on Rails - Complex route constraints made easy

Ruby on Rails - Complex route constraints made easy

In Rails, we know that the routes are the most important entry-point where we define the which url hits which controller. We also know how to define the resources and add some conditions to the routing.
Software Development
by Jey Geethan | March 31, 2019

In Rails, we know that the routes are the most important entry-point where we define the which url hits which controller. We also know how to define the resources and add some conditions to the routing.


In this post, I want to concentrate about how to go about complex route conditions and make it easy for you to write modular code.


Let's say that you have to write a condition that if the domain belongs to a given domain, route the root url to some other controller. You can accomplish it using the following snippets:


Here you are creating a class for the domain constraint and having the required method called matches? which does the computing on the fly.


class DomainConstraint
  def initialize(domain)
    @domains = [domain].flatten
  end

  def matches?(request)
    @domains.include? request.domain
  end
end

Now you add the code to the routes.rb as following:


constraints DomainConstraint.new('mydomain.com') do
  root :to => 'mydomain#index'
end

The above code makes sure that the requests coming to a mydomain.com will have a root url at the mydomain controller and index action!


Happy Railing!


Jey Geethan

Jey Geethan is a poet, author and an entrepreneur.


Related Articles

Software Development

Do you want to use your macbook as a lap-heater?

by Jey Geethan | August 28, 2019
Do you want to use your macbook as a lap-heater?
How many times have you felt the coldness of a meeting room and wish you had brought a heater into the room. Now you can convert your macbook into a heater
Software Development

iTerm2 vs Plain Old Terminal - Which One Is The Best?

by Jey Geethan | August 28, 2017
iTerm2 vs Plain Old Terminal - Which One Is The Best?
Have you ever wondered if you have an alternative that will be better and useful than the default terminal?