2

我是 ruby​​ on rails 的新手,我遇到了 find 功能的问题。

我创建了一个新的 Web 应用程序,它使用 oracle 增强适配器 gem 连接到旧版 Oracle 数据库。

当我在 rails 控制台中运行以下命令时,我会从数据库中取回数据

License.where(license_no: 'L1234') 

或者

License.find_by_license_no('L1234') 

但是,当我尝试使用 find() 函数时,出现错误。IE

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 命令,我注意到选择语句中添加了双引号。当我尝试在 SQL Developer 中运行 SQL 命令时,出现错误。添加双引号有什么原因吗?有没有办法阻止 ruby​​ on rails 在表名中添加双引号?

更新oracle 数据库是 10g,我正在使用带有 ruby​​ 1.9.2p290 的 rails 3.2。我也尝试了以下方法并得到了同样的错误。 License.all

4

2 回答 2

2

在 Rails 3 中使用 find 函数(取决于您使用的 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 回答