Categories

ActiveRecord, method_missing и stack level too deep

Переопределяя у ActiveRecord модели #method_missing важно помнить, что методы чтения атрибутов генерятся через сам #method_missing

Так, например, код

class Appearance < ActiveRecord::Base serialize :prefereneces, HashWithIndifferentAccess def method_missing(name, *args) preferences[name] || super end end

вывалит Exception SystemStackError: stack level too deep

Обойти это можно, вызвав сначала super и перехватив NoMethodError, а потом его рейзануть обратно [...]