ROR项目中连接多个数据库的方法

   首先打开config目录中的database.yml文件,配置要访问的另外一个数据库的信息。

  1. other_db_name_connection:   
  2.   adapter: mysql   
  3.   database: other_db_name   
  4.   username: root   
  5.   password:   
  6.   encoding: utf8   
  7.   host: localhost

这个数据库可以和以前的数据库在同一台机器上,也可以在其他的机器上,在host里边可以完全配置。

然后生成一个继承ActiveRecord::Base的抽象类

  1. class External < ActiveRecord::Base  
  2.   self.abstract_class = true  
  3.   establish_connection :other_db_name_connection  
  4. end

现在这个继承类重写了
ActiveRecord::Base 的数据库链接,而这个链接就是我们在配置文件里边定义的。
dupal_database,那么这个类的代码就要进行部分的改变。
如下:

  1. class DupalDatabase::External < ActiveRecord::Base    
  2.    self.abstract_class = true    
  3.    establish_connection :other_db_name_connection    
  4.  end

然后再新建一个model文件,生成一个新的model类。这个新的model类继承了上边的抽象类
将继承上边的model类和上边的这个抽象类放到一个包里。按照上边的,我们暂时放到dupal_database

  1. class DupalDatabase::Stock < DupalDatabase::External  
  2.   self.table_name ='day_info'  
  3. end

如果利用其它系统的数据库,或者其他表的名字会变,那么最好自定义表名

最后我们来调用访问
访问的时候如果你把model放到其他的目录里边比如上边的目录,那么访问起来就是:

  1. stock =DupalDatabase::Stock.find(:all)  
  2. stock= DupalDatabase::Stock.new()

现在rails当中就可以完全的访问不同的数据库了,这种方式用过可以应用到rails的分布式架构中。。

相关文章:

Tags:

Leave a Reply