Как заставить работать .try () в модуле Rails? - PullRequest
2 голосов
/ 24 февраля 2010

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

1 Ответ

1 голос
/ 24 февраля 2010

Метод try добавлен модулем ActiveSupport в Rails, поэтому вам необходимо require active_support в вашем модуле.

Редактировать: В качестве альтернативы, просто добавить его в 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
...