2012-04-19 60 views
2

我是Ruby on Rails的新手,我遇到了find函數的問題。Ruby on Rails將雙引號添加到「查找」功能

我創建了一個新的Web應用程序,它使用oracle增強適配器gem連接到傳統的Oracle數據庫。

當我運行的軌道控制檯下面的命令,我找回數據從數據庫

License.where(license_no: 'L1234') 

License.find_by_license_no('L1234') 

然而,當我嘗試使用的查找()函數,我收到一個錯誤。即

License.find(:all) 

License.all

在軌控制檯錯誤輸出如下:

irb(main):003:0> License.find(:all) 
    ?[1m?[35mLicense Load (1062.5ms)?[0m SELECT "LICENSE".* FROM "LICENSE" 
ActiveRecord::StatementInvalid: OCIError: ORA-01878: specified field not found i 
n datetime or interval: SELECT "LICENSE".* FROM "LICENSE" 
     from stmt.c:289:in oci8lib_191.so 
     from c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/activerecord-o 
racle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanc 
ed_oci_connection.rb:155:in `fetch' 
     from c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/activerecord-o 
racle_enhanced-adapter-1.4.1/lib/active_record/connection_adapters/oracle_enhanc 
ed_adapter.rb:637:in `block in exec_query' 
     from c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/activerecord-3 
.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in 
log' 

望着錯誤輸出中的SQL命令,我注意到的是雙引號是添加到select語句中。當我嘗試在SQL Developer中運行SQL命令時,出現錯誤。有什麼理由爲什麼加雙引號?有沒有辦法阻止紅寶石添加到表名稱的雙引號?

UPDATE oracle數據庫是10g,我使用rails 3.2和ruby 1.9.2p290。我也嘗試了以下,並得到了同樣的錯誤。 License.all

+0

你忘了提及任何的你的軟件版本。所以很難有所幫助。我們所知道的是,您正在處理廣告舊版本的數據庫... – jdoe 2012-04-19 13:49:46

+1

看來解決我的問題的解決方案是更新我的/config/initializers/oracle.rb文件中的時區設置以匹配相同的時區作爲Oracle數據庫。 – dspencer 2012-04-19 18:56:43

回答

2

使用查找功能正確的格式在Rails 3中(取決於你使用的是什麼版本的Rails的),就是:

License.where('license_no = ?', 'L1234') 

License.all 

找到他們全部。

如果你在軌道2,格式是:

License.find(:all, :conditions => ["license_no = ?", "L1234"]) 

看那動態基於屬性的發現者這裏部分:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+0

我正在使用Rails 3.2.2。 當條件/ where子句被實現時,我沒有問題從數據庫中獲取數據,我只是在嘗試從數據庫中檢索所有數據時纔得到該問題。 我試過兩個: 'License.all'或 'License.find(:all)',仍然在我的問題中得到相同的錯誤。 – dspencer 2012-04-19 14:44:55

+0

它看起來像是由於表中的日期時間字段的排序而發生錯誤。這是一個Oracle特定的錯誤。確保Rails保存到數據庫中的日期時間格式與Oracle中用於這些列的模式兼容/正確。 – 2012-04-19 15:38:26

+1

感謝@StephRose的幫助。看來解決我的問題的解決方案是更新我的/config/initializers/oracle.rb文件中的時區設置,以便與Oracle數據庫匹配相同的時區。 – dspencer 2012-04-19 17:40:28