2012-04-19 9 views
2

Ruby on Railsの新機能で、find関数に問題があります。Ruby on Railsで "find"関数の二重引用符を追加する

oracle拡張アダプタ・ガムを使用して従来のOracleデータベースに接続する新しいWebアプリケーションを作成しました。

私はレールのコンソールで次のコマンドを実行すると、私は見つける()関数を使用しようとすると、私は、しかし、バックデータベース

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で、私はruby 1.9.2p290でrails 3.2を使用しています。私も次のように試してみて、同じエラーが発生しました。 License.all

+0

あなたはのいずれかを言及するのを怠っあなたのソフトウェアのバージョン。だから、助けになるのは難しいです。私たちが知っていることは、旧バージョンのDBを扱っていることです... – jdoe

+1

私の問題を解決する解決策は、/config/initializers/oracle.rbファイルのタイムゾーン設定を同じタイムゾーンに合わせて更新することでしたOracleデータベースとして使用します。 – dspencer

答えて

2

のRails 3に(あなたが使用しているのRailsのバージョンによって異なります)検索機能を使用するための正しい書式は、次のとおりです。

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

または

License.all 

それらのすべてを見つける。

あなたがRailsの2にある場合、フォーマットは次のようになります。ここダイナミック属性ベースのファインダセクションで

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

ルック:

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

+0

私はRails 3.2.2を使用しています。 私は戻っ句が、私は、データベースからすべてのデータを取得しようとすると、私が唯一の問題を得ている、実装されている条件/データベースからデータを取得して何の問題もありません。 私は両方を試してみた: 'License.all'または ' License.find(:すべてを) '、まだ私の質問に同じエラーを取得します。そのエラーがテーブルに並べ替えの日時フィールドのために発生しているよう – dspencer

+0

に見えます。 Oracle固有のエラーです。 RailsはDBに保存された日時書式は、Oracleでそれらの列を持っているスキーマの正しい/互換性があることを確認してください。ヘルプ@StephRoseため –

+1

感謝。私の問題を解決するソリューションは、Oracleデータベースと同じタイムゾーンに合わせて、私の/config/initializers/oracle.rbファイル内のタイムゾーンの設定を更新するためだったことが表示されます。 – dspencer

関連する問題