2010-02-24 1 views
2

С Rails 2.3.5 Я написал модуль в RAILS_ROOT/lib/foo.rb, который я включаю в некоторые модели через «include Foo», и все хорошо, за исключением случаев, когда я пытаюсь использовать some_object.try (: some_method) в коде модуля - он выдает NoMethodError, а не возвращает нуль, как это было бы из модели/контроллера Rails/etc. Нужно ли мне требовать от Rails файла Rails?Как получить .try(), работающий в модуле Rails?

ответ

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 
+0

пытался что такой же вопрос :-( 2) Ошибка: test_something (WithDescendantsTest): NoMethodError: неопределенный метод 'direct_descendants' для # Библиотека/with_ descendants.rb: 40: в 'try ' –