С Rails 2.3.5 Я написал модуль в RAILS_ROOT/lib/foo.rb, который я включаю в некоторые модели через «include Foo», и все хорошо, за исключением случаев, когда я пытаюсь использовать some_object.try (: some_method) в коде модуля - он выдает NoMethodError, а не возвращает нуль, как это было бы из модели/контроллера Rails/etc. Нужно ли мне требовать от Rails файла Rails?Как получить .try(), работающий в модуле Rails?
2
A
ответ
1
Метод try
добавлен модулем ActiveSupport Rails, поэтому в вашем модуле необходимо require active_support
.
Edit: В качестве альтернативы, это тривиально, чтобы добавить его Object
себя, если вы не хотите, чтобы принести в целом ActiveSupport:
От active_support/lib/active_support/core_ext/object/try.rb:
class Object
def try(method, *args, &block)
send(method, *args, &block)
end
remove_method :try
alias_method :try, :__send__
end
class NilClass #:nodoc:
def try(*args)
nil
end
end
пытался что такой же вопрос :-( 2) Ошибка: test_something (WithDescendantsTest): NoMethodError: неопределенный метод 'direct_descendants' для # Библиотека/with_ descendants.rb: 40: в 'try ' –