Connecting Models To Different Databases In Rails

Posted By Weston Ganger

I had some models that were being used in quite a few different applications, so we needed to move them into their own application and database. I found out a nice way of doing this and wanted to share the solution to set up models that connect to a different database in your Rails app.

Add the information about your other database(s) to your config/database.yml like so:

### app/models/remote_models.rb
class SecondDatabaseModels < ActiveRecord::Base
    self.abstract_class = true 

    self.table_name_prefix =  "your_database_name#{Rails.env.production? ? '' : '_'+Rails.env}."

    establish_connection "#{Rails.env}_db2"
end

### app/models/site.rb
class Site < SecondDatabaseModels
end

### app/models/project.rb
class Project < SecondDatabaseModels
end

### app/models/company.rb
class Company < SecondDatabaseModels
    ### In some cases where the joins are complicated you may need to add the following 
    ### because Rails might incorrectly ignore the table_name_prefix    
    self.table_name =  "your_database_name#{Rails.env.production? ? '' : '_'+Rails.env}.companies"
end

Related External Links:

Article Topic:Software Development - Ruby / Rails

Date:March 21, 2015