2010-06-16 1 views
0

Мне нужно использовать функцию «image_path» в моем классе lib. Я пробовал это (и пару других вариантов):Включить класс в другую модель/класс/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 есть эмпирическое правило, как включить этот модуль в модель/библиотеку/класс/что-нибудь еще?

ответ

3

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

Но вы пытаетесь называть его ClassMethods.

Так что попробуйте extend ActionView::Helpers::AssetTagHelper, не включают в себя это

+0

Спасибо за ваш ответ, очень высокую оценку. Однако я получил эту ошибку: undefined method 'image_path 'для ActionView :: Helpers :: AssetTagHelper: Module, что это значит? – jaycode

+0

это если вы расширите AssetTagHelper на своем классе? – shingara

+0

Спасибо! Теперь я знаю разницу между продолжением и включением, теперь ваш ответ имеет смысл для меня. Изучение основ очень важно, очевидно – jaycode

0

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

конфигурации/application.rb

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