Это происходит в методе after_save в одной из моих моделей, PlayerAction. Я не изменил код во время обновления (последние известные слова). Похоже, что происходит в следующей строке:
if self.action_type.id == 1
Модель PlayerAction имеет
belongs_to :action_type
Изменение action_type.id на action_type_id исправило эту проблему, но та же проблема происходит в другом месте, в этой строке
player_action.action_type.desc
Вот трассировка полного стека, где проблема возникает в этой строке
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `find'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `send'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/belongs_to_association.rb:49:in `find_target'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/association_proxy.rb:240:in `load_target'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/association_proxy.rb:112:in `reload'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations.rb:1219:in `action_type'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:164:in `full_xml'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:160:in `each'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:160:in `full_xml'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:156:in `full_xml'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:136:in `full_xml'
C:/InstantRails2-0/rails_apps/rftg/app/models/game.rb:86:in `full_xml'
C:/InstantRails2-0/rails_apps/rftg/app/controllers/games_controller.rb:33:in `show'
C:/InstantRails2-0/rails_apps/rftg/app/controllers/games_controller.rb:30:in `show'
ActionType - еще одна моя модель, и это довольно общее имя, как указано в другом ответе. Может ли это быть источником проблемы? Я заглянул в основную документацию по rails и не увидел класс или метод с именем ActionType или action_type.
Оказывается, я просто добавил собственный метод поиска для ActionType:
def self.find(id)
Rails.cache.fetch(cache_key) { ActionType.find(id) }
end
ActionType - это в основном статические данные, и я пытаюсь их кешировать. Существует около 10 строк для ActionType, и у меня есть несколько других моделей, которые имеют аналогичные статические данные. Вот и вся причина, по которой я начал процесс обновления рельсов, чтобы получить эту функцию кеширования. Я пытался найти пример того, как сделать это правильно. Очевидно, приведенный выше код не является правильным. Я нашел еще один вопрос о наилучшем способе обработки статических данных в модели, но он не совсем помог.