2012-04-19 5 views
2

Я новичок в рубинах на рельсах, и у меня проблема с функцией find.Ruby on Rails добавляет двойные кавычки к функции «Найти»

Я создал новое веб-приложение, которое соединяется с устаревшей базой данных Oracle с использованием усовершенствованного адаптера 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 в SQL Developer, у меня возникла ошибка. Есть ли причина, по которой добавляются двойные кавычки? Есть ли способ остановить рубин на рельсах от добавления двойных кавычек к именам таблиц?

ОБНОВЛЕНИЕ База данных оракула составляет 10 г, и я использую рельсы 3.2 с рубином 1.9.2p290. Я также пробовал следующее и получил ту же ошибку. License.all

+0

Вы забыли упомянуть любой из вы версии программного обеспечения. Поэтому трудно быть полезным. Все, что мы знаем, это то, что вы имеете дело с старой версией DB ... – jdoe

+1

Похоже, что решение для решения моей проблемы состояло в том, чтобы обновить настройку часового пояса в файле /config/initializers/oracle.rb в соответствии с тем же часовым поясом как база данных Oracle. – dspencer

ответ

2

Правильное форматирование с помощью функции поиска (в зависимости от того, какая версия Rails вы используете) в Rails 3, является:

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

или

License.all 

чтобы найти все из них.

Если вы находитесь в Rails 2, форматирование будет:

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

Посмотрите на динамических атрибутов на основе Finders раздел здесь:

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

+0

Я использую Rails 3.2.2. У меня нет проблем с возвратом данных из базы данных при выполнении условия/where, я получаю эту проблему только при попытке получить все данные из базы данных. Я пробовал оба: 'License.all' или ' License.find (: all) 'и по-прежнему получаю ту же ошибку в моем вопросе. – dspencer

+0

Похоже, что эта ошибка возникает из-за поля типа datetime в таблице. Это ошибка, характерная для Oracle. Убедитесь, что формат даты и времени, который Rails сохраняет в БД, совместим/исправлен для схемы, которую вы используете для этих столбцов в Oracle. –

+1

Спасибо за помощь @StephRose. Похоже, решение для решения моей проблемы состояло в том, чтобы обновить настройку часового пояса в файле /config/initializers/oracle.rb, чтобы соответствовать тому же часовому поясу, что и база данных Oracle. – dspencer

 Смежные вопросы

  • Нет связанных вопросов^_^