Мы имеем следующую модель:Является ли это возможной ошибкой в «activerecord-jdbc-adapter» при попытке загрузить нагрузку?
payment.rb:
class Payment < ActiveRecord::Base
has_many :currencies
default_scope :include => :currencies
end
Мы используем default_scope
для нетерпеливого нагрузки валюты. Когда мы управляем этим мы получаем следующее сообщение об ошибке:
[2012-03-22 21:43:25] ERROR NoMethodError: undefined method `each' for nil:NilClass
/home/me/.rvm/gems/[email protected]_project/gems/activerecord-3.2.1/lib/active_record/associations/preloader/association.rb:88:in `associated_records_by_owner'
org/jruby/RubyArray.java:1615:in `each'
/home/me/.rvm/gems/[email protected]_project/gems/activerecord-3.2.1/lib/active_record/associations/preloader/association.rb:85:in `associated_records_by_owner'
...
Проблема может быть найдена в:
линии 88 и 89 в association.rb (github link):
...
owner_key = record[association_key_name].to_s
owners_map[owner_key].each do |owner|
...
Когда я пошагово в коде я вижу, что record[association_key_name]
является BigDecimal, например 108,0, и когда применяется to_s
, оно становится «108,0». Однако ключи в байтах owners_map
ожидают «108» не «108,0»
association_key_name
- это имя внешнего ключа в базе данных Oracle и определяется как тип Number. Первичный ключ также определяется как тип Number, но, как ни странно, он не разрешает BigDecimal.
Любые идеи? Это возможная ошибка? Или нужна ли точность в столбце базы данных?
System Info:
JRuby на Rails (3.2.1)
ActiveRecord JDBC Adapter
Oracle Database (с использованием представлений вместо таблиц)
Да, как-то тип данных в Oracle имеет точность> 0. Если Rails сгенерировал столбец (определенный как целое число), то это, вероятно, ошибка Rails. Если таблица существовала с внешним ключом типа Number с точностью> 0, то это ошибка ... или, по крайней мере, проблема, ожидающая своего появления. На самом деле, я думаю, он больше не будет ждать :-). Я нашел это (в возрасте) с быстрым поиском google: http://blog.rayapps.com/2007/11/16/some-issues-with-oracle-views-as-activerecord-source/ –
Спасибо за ссылку ! Я фактически использую представления для обертывания таблиц, поэтому я рассмотрю, как удалить точность. – ryan