2010-07-13 60 views
0

我跑的Rails 3,和我有幾個控制器,所有這樣做的以下內容:在Rails的數據庫連接全局變量

@db = Mongo::Connection.new.db(MONGOID_CONFIG['database']) 

我不希望有多個連接數據庫,所以自然的事情似乎是將@db包裝在某個單例中,該單例在我啓動應用程序時被初始化。我的問題是,如何做到這一點?

我的第一個想法是使用助手,但我被告知這些只是建議用於生成視圖的東西,顯然意見不應該直接訪問數據庫。那裏還有什麼?寫一個插件? :)

回答

2

如果你正在使用Mongoid(我假設你可能因爲你的常量被命名爲MONGOID_CONFIG),你可以使用@db = Mongoid.master.connection來獲得連接到主數據庫服務器的Mongo :: Connection。

+1

謝謝,我剛剛發現了這一點。事實上,你可以使用'Mongoid.database',完全繞過連接。 – 2010-07-27 16:38:00

1

首先,您可以編寫一個幫助程序,例如將其放在application_controller.rb中,因此視圖沒有問題(以及視圖幫助程序通常會進入app/helpers /中)。

否則,你可以寫下面的命令,並把它在配置/初始化/ mongo_db.rb:

$db = Mongo::Connection.new.db(MONGOID_CONFIG['database']) 

文件會在系統啓動加載,$ DB代表一個全局變量,所以它的可用於整個應用程序(包括視圖),但您只能在適當的地方使用它,對嗎? ;-P

+0

我喜歡初始化器的想法。我的Ruby新手道歉,但是在那裏聲明一個全局函數而不是變量的語法是什麼? (我想使用函數包裝來維護連接實例,並在必要時重新連接。) – 2010-07-16 21:08:54

+0

您可以創建一個非常簡單的類,它包裝連接以暴露一些特定方法;) – 2010-07-17 08:45:00