Multiple database in rails

Author :- Amar Daxini

In normal rails application contain one database,but if we want rails application having more than one database that is multiple data base.
we can achieve this using multiple way.one of the way is i am showing here.it’s just 3 steps.

Lets take an e.g Project has many milestone and milestone has many task
In normal scenario model looks like following way

class Project < ActiveRecord::Base
  has_many :milestones
end

class Milestone < ActiveRecord::Base
    has_many :tasks
    belongs_to :project
end

class Task < ActiveRecord::Base
  belongs_to :milestone
end

  

Now we want that milestone is stored on milestone_db database and task on task_db database
Rails multiple database Now to achieve this we have to do the following steps

1 Edit Database.yml

    milestone_dev:
     reconnect: false
     encoding: utf8
     username: <user_name>
     adapter: mysql
     database: milestone_db
     pool: 5
     password: <password>

    task_dev:
     reconnect: false
     encoding: utf8
     username: <user_name>
     adapter: mysql
     database: task_db
     pool: 5
     password: <password>
   

2 Edit milestone.rb and task.rb

class Milestone < ActiveRecord::Base
  #add this line to use milestone_db
  self.establish_connection :milestone_dev
  has_many :tasks
  belongs_to :project
end

class Task < ActiveRecord::Base
  #add this line to use task_db
  set_table_name "tasks"
  belongs_to :milestone
end
 

3 After editing model edit migration file

class CreateMilestones < ActiveRecord::Migration
  def self.connection
    Milestone.connection
  end
 .....
end
 

Now rails application is ready with multiple database.