У меня есть метод класса в моей модели, и мне нужно получить доступ к методу одного из моих помощников представления. В настоящее время я включаю include TalkHelper
, но все еще получаю NoMethodError.
Rails 3 Просмотр вспомогательного метода в модели
Ответы (3)
Вы можете поместить помощника в свою папку lib и включить их туда где угодно. Вот так: lib/some_helper.rb
module SomeHelper
def somedef
#your code there
end
end
person
railscard
schedule
18.09.2011
должно быть
module
(нижний регистр)?
- person Tyler DeWitt; 30.11.2012
В вашей модели вы можете сделать что-то вроде следующего:
ApplicationController.helpers.your_helper_method
ИЛИ
YourController.helpers.your_helper_method
Лучшее решение — провести рефакторинг кода, чтобы вообще не вызывать вспомогательный код представления из моделей. Это не путь RoR. Как отмечают другие, вы можете извлечь вспомогательный код в папку lib.
Смотрите это для получения дополнительной информации:
http://railscasts.com/episodes/132-helpers-outside-views
person
Innerpeacer
schedule
19.09.2011
В итоге я последовал вашему совету и переделал свой код, чтобы мне не пришлось использовать вспомогательный метод в модели.
- person LanguagesNamedAfterCofee; 19.09.2011
Если вам нужен помощник в методе класса, вам нужно extend
его, а не include
.
module TalkHelper
def woo; 'hoo' end
end
class MyClass
extend TalkHelper
def self.boo; woo end
end
MyClass.boo #=> 'hoo'
Только будьте осторожны с хелперами вне контекста представления, так как хелперы могут зависеть от controller
или чего-то еще из контекста запроса, чего не будет в вашей модели.
person
numbers1311407
schedule
19.09.2011