У меня есть 2 модели с отношением один-к-одному (пример упрощенный, а не реальные модели).
class Person < ActiveRecord::Base
belongs_to :student, :foreign_key => 'name', :primary_key => 'full_name'
end
class Student < ActiveRecord::Base
belongs_to :person, :foreign_key => 'full_name', :primary_key => 'name'
end
Связь между ними является слабой, поскольку можно изменить поле full_name в объекте Student, а затем объект person не может быть достигнут из объекта Student.
Пока все хорошо (это специально).
Проблема возникает, когда имя человека совпадает с полным именем_эквивалента учащегося, но отличается в случае букв.
Запрос для БД MySQL возвращает результат (так как MySQL нечувствителен к регистру),
но когда Rails запускает результат, он не находит его (поскольку Rails чувствителен к регистру),
что приводит к ошибке при активной загрузке ассоциации.
Пример трассировки стека ошибки:
NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each):
vendor/rails/activerecord/lib/active_record/association_preload.rb:155:in `set_association_single_records'
...
Я предполагаю, что это ошибка в Rails 2.3.8.
Есть ли простое решение этой проблемы?
Спасибо!