我对ruby on rails很陌生,而且我对find函数有问题。
我创建了一个新的web应用程序,它使用Oracle增强适配器gem连接到遗留的oracle数据库。
当我在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命令时,出现了一个错误。有什么理由增加双引号吗?有没有办法阻止将双引号添加到表名中?
UPDATE oracle数据库是10g,我使用rails 3.2和ruby1.9.2p290。我也尝试了下面的方法,并得到了同样的错误。License.all
发布于 2012-04-19 13:42:25
在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-19 13:32:29
Model.find不接受哈希作为第一个参数。所以它以错误的方式对待您的散列(license_no: 'L1234')。
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find
https://stackoverflow.com/questions/10229093
复制相似问题