Включить класс в другую модель / класс / lib - PullRequest
0 голосов
/ 16 июня 2010

Мне нужно использовать функцию "image_path" в моем классе lib.Я попробовал это (и несколько других вариантов):

class CustomHelpers::Base
  include ActionView::Helpers::AssetTagHelper
  def self.image_url(source)
    abs_path = image_path(source)
    unless abs_path =~ /^http/
      abs_path = "#{request.protocol}#{request.host_with_port}#{abs_path}"
    end
    abs_path
  end
end

Но это не сработало.Правильно ли я делаю это?

Другой вопрос, как мне найти подходящий класс для включения?Например, если я посмотрю на этот модуль: http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html Есть ли практическое правило, как включить этот модуль в модель / библиотеку / класс / что-нибудь еще?

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Вы включаете модуль, поэтому все методы в нем находятся в InstanceMethods.

Но вы пытаетесь вызвать его с помощью ClassMethods.

Поэтому попробуйте extend ActionView::Helpers::AssetTagHelper, не включайте его

0 голосов
/ 16 сентября 2015

Лучше всего поместить все такие классы в некоторые каталоги и включить такие пути в autoload_paths. Так что, если бы пришлось включить каталоги lib , Presenters и jobs , то я бы автоматически загружал их в свое приложение.

конфиг / application.rb

 config.autoload_paths += ["#{config.root}/lib", './app/jobs', './app/presenters']
...