rails應用與多數據庫的連接

quguiliang 13年前發布 | 959 次閱讀
rails與多數據庫的連接有插件模式,也有原生模式,本文參考互聯網資料,總結出來,并實際連接成功
1、配置database.yml
development:
  adapter: mysql
  encoding: utf8
  database: myapp
  username: root
  password:
  host: localhost

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: mysql
  encoding: utf8
  database: myapp
  username: root
  password:
  host: localhost

typo:
    adapter: mysql
    database: typo
    username: root
    password:
    host: localhost
說明:
1、typo是外部數據庫,這是一個rails安裝之后就存在的一個實例應用的庫;
2、其他的development、test、production都是缺省的主數據庫,這是缺省配置;
3、yml文件的書寫方式非常嚴格,typo描述部分的下面各個參數必須采用tab的方式對齊,在netbeans中可以識別此格式,如果格式不對,將提示錯誤。

二、編寫一個外部庫的基礎模型類
創建external_data.rb這個模型類
class ExternalData < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :typo
end
說明:
1、self.abstract_class = true,表示這個模型類不會與庫中的任何表有關系,也就是一個抽象的類。
2、establish_connection :typo,就是配置連接

三、編寫一個具體的模型類
下面是typo庫的表
+---------------------+
| Tables_in_typo      |
+---------------------+
| articles            |
| articles_categories |
| blacklist_patterns  |
| categories          |
| comments            |
| page_caches         |
| pages               |
| pings               |
| resources           |
| schema_info         |
| sessions            |
| settings            |
| sidebars            |
| trackbacks          |
| users               |
+---------------------+
我們隨便選擇一個如,pages,實現它的模型;
創建文件page.rb,內容如下:
class Page<ExternalData
end
說明:
1、關鍵在于page這個類是從剛才定義的抽象類ExternalData中繼承而來,有一個好處是這個抽象類下衍生出來的各個模型類可以共用連接池,減少數據庫連接的消耗。
2、這種采用繼承的方式非常方便創建其他表對應的類,不需要在模型中重復書寫establish_connection :typo這樣的語句。比如對settings這個表,創建setting.rb模型類文件,代碼如下:
class Setting<ExternalData
end
與缺省庫中的模型操作起來一樣,不一樣的就是父類不同而已。

四、測試看看是否成功
ruby script/console
>> ExternalData
=> ExternalData(abstract)
>> Page
=> Page(id: integer, name: string, title: string, body: text, body_html: text, text_filter: string, user_id: integer, created_at: datetime, updated_at: datetime)
>> Setting
=> Setting(id: integer, name: string, value: string)

沒有問題。




轉自:http://www.javaeye.com/topic/910021
 本文由用戶 quguiliang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!