2

ruby on rails は初めてで、検索機能に問題があります。

oracle 拡張アダプター gem を使用して、レガシー Oracle データベースに接続する新しい Web アプリを作成しました。

Rails コンソールで次のコマンドを実行すると、データベースからデータが返されます

License.where(license_no: 'L1234') 

また

License.find_by_license_no('L1234') 

ただし、find() 関数を使用しようとすると、エラーが発生します。すなわち

License.find(:all)

また License.all

Rails コンソールのエラー出力は次のとおりです。

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 コマンドを実行しようとすると、エラーが発生しました。二重引用符が追加されている理由はありますか? ruby on rails がテーブル名に二重引用符を追加するのを止める方法はありますか?

更新Oracle データベースは 10g で、Ruby 1.9.2p290 で rails 3.2 を使用しています。私も次のことを試しましたが、同じエラーが発生しました。 License.all

4

2 に答える 2

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

于 2012-04-19T13:42:25.393 に答える
1

Model.find最初のパラメーターとしてハッシュを受け入れません。したがって、ハッシュ ( license_no: 'L1234') を間違った方法で扱います。

http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find

于 2012-04-19T13:32:29.553 に答える