Является ли это возможной ошибкой в ​​'activerecord-jdbc-adapter' при попытке активной загрузки? - PullRequest
1 голос
/ 23 марта 2012

У нас есть следующая модель:

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 (с использованием представлений вместо таблиц)

1 Ответ

2 голосов
/ 23 марта 2012

Проблема связана с тем, что внешний ключ в базе данных был точно определен как Number. Спасибо Таррисон за указание на эту статью.

Я получил наш администратор базы данных, чтобы удалить точность на поле, и все работало нормально. Конечно, нам повезло создать новый продукт, в котором наша схема может быть легко изменена ...

...