2013-04-24 80 views
1

有沒有辦法在ActiveRecord中使用本地數據庫功能?ActiveRecord可以調用native db函數嗎?

示例:假設我想在Postgres中使用now()。我不想使用Time.now,因爲我想要使用數據庫時間,而不是Rails服務器時間。

就像這樣,這顯然不起作用。

TableCommon.new({:upd_date => now()}) 

注意:這是一個做作例子。我不想使用now(),但我想使用其他數據庫函數,並希望知道如何通過ActiveRecord使用它。

回答

3

是的,你可以直接通過連接訪問

TableCommon.new(:upd_date => TableCommon.connection.select_value("now()")) 

connection.select_value得到一個結果回,忽略其它:

ActiveRecord::Base.connection.select_value("select 1,2") #returns 1 

connection.select得到一個哈希回:

ActiveRecord::Base.connection.select("select 1 as a ,2 as b") #{"a"=>1, "b" =>2} 

connection.select_all將給出一個哈希數組,每行一個像select。

connection.select_values將給出一個數組,每個行中的第一個值的值。這就像select_value,但有多行。

+0

這將使數據庫調用獲取now(),對不對?無論如何不做數據庫調用呢? – 2013-04-24 19:02:23

+0

它會,否則該值將不可用於您的模型。發生插入時也會引用它。除非你想重寫rails如何處理插入操作,否則我會建議一個after_create回調,它可以像TableCommon.update_all(「dyn_column = now()」,:id => self.id) – 2013-04-24 19:16:10

相關問題