Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix eager loading a Rails app with
performs
in an associated object
ActiveJob::Performs was being included in an after_initialize hook, which was after the models were loaded, which means that an associated object that has a `performs` call in it had no `performs` method. This triggered the method_missing to run and find the `performs` method on the ActiveRecord model, use that, and then attempt to call my associated object name on the return value. Given this code: class AudioTrack::ListeningPlanDaySyncer < ActiveRecord::AssociatedObject performs :sync end `performs` didn't exist, so it'd call `AudioTrack.performs :sync`, which returns :sync_later. Then the method_missing code would attempt to run `:sync_later.listening_plan_day_syncer` and error. By moving this on_load hook out of `after_initialize`, I now have a `performs` method when eager loading. I think the only reason it was working before is because the models were being lazy loaded, so I didn't attempt to call `performs` until long after boot.
- Loading branch information