Active Record抽象了數據庫連接的概念,幫助應用程序來處理底層的數據庫鏈接的細節,作為替代,Active Record使用通用的調用,將細節委托給一組數據庫適配器。
可以使用establish_connection( )方法來制定連接,下面的例子創建了一個mysql數據庫連接,數據庫的名字是railsdb,服務器的Host名為dbserver.com,用戶名為railsuser,密碼為railspw。
ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "dbserver.com", :database => "railsdb", :username => "railsuser", :password => "railspw" )
Active Record支持DB2,MySql,Oracle,Postgres,SqlServer,以及SqlLite,每一種數據庫適配器在鏈接的參數上都有一些細小的差別,下表列出了常用的參數:
注意Oracle適配器的名字為oci。
數據庫連接和Model類是關聯的,每個類都從父類那裡繼承了鏈接,ActiveRecord::Base作為所有的Active Record類的父類,設置這裡的數據庫連接就給所有的活動記錄類設置了鏈接,當然,如果需要的話,你也可以復寫(override)鏈接配置。
下面的例子裡,我們的大多數表都在MySql數據庫中,庫名為online,由於一些歷史原因,customers表在名為backend的數據庫中,
ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "dbserver.com", :database => "online", :username => "groucho", :password => "swordfish") class LineItem < ActiveRecord::Base # ... end class Order < ActiveRecord::Base # ... end class Product < ActiveRecord::Base # ... end class Customer < ActiveRecord::Base # ... end Customer.establish_connection( :adapter => "mysql", :host => "dbserver.com", :database => "backend", :username => "chicho", :password => "piano")
在我們前面所寫的depot程序中,我們沒有使用establish_connection方法,而是在config/database.yaml文件中指定了數據庫連接的參數信息,對於大多數rails程序來說,這是首選的方式,不僅因為將配置信息和代碼分離,而且在測試和部署時也能帶來方便,上面的表格裡列出的參數都可以應用在YAML文件中,這一點我們在前面的配置文件一節已經有介紹。
最後,如果你通過一個標記訪問establish_connection(),Rails會在database.yaml文件中查找名字對應的配置節,來獲取鏈接的參數,這樣就可以將所有的數據庫連接配置從代碼中分離出來。