У нас есть следующая модель:
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/jruby-1.6.7@my_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/jruby-1.6.7@my_project/gems/activerecord-3.2.1/lib/active_record/associations/preloader/association.rb:85:in `associated_records_by_owner'
...
Проблема может быть найдена в:
Строки 88 и 89 в association.rb (ссылка на github) :
...
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.
Есть идеи? Это возможная ошибка? Или нужно изменить точность столбца базы данных?
Информация о системе:
JRuby on Rails (3.2.1)
ActiveRecord JDBC Adapter
База данных Oracle (с использованием представлений вместо таблиц)