Вы можете потенциально исправить эту проблему, убедившись, что self.name
действительно существует:
def method_missing(name)
if self.respond_to?(:name) && self.name
# do stuff
end
end
Обратите внимание, что может не работать , если ваш класс наследует от чего-либоRailsy (например, ActiveRecord::Base
), поскольку он переопределяет respond_to?
.
Если вы являетесь в классе Railsy, ваш отсутствующий метод должен вызвать super
, чтобы вы не потеряли много«магические» методы ActiveRecord (включая, вероятно, сам self.name
):
def method_missing(name, *args, &block)
if name_is_something_i_should_handle_here
# do your stuff
else
super(name, *args, block) # call parent's method_missing
end
end
Очевидно, вы должны заменить name_is_something_i_should_handle_here
соответствующей логикой.
Вы также можете рассмотретьиспользование создания динамического метода вместо method_missing
.