Rails 3 Просмотр вспомогательного метода в модели

У меня есть метод класса в моей модели, и мне нужно получить доступ к методу одного из моих помощников представления. В настоящее время я включаю include TalkHelper, но все еще получаю NoMethodError.


person LanguagesNamedAfterCofee    schedule 18.09.2011    source источник


Ответы (3)


Вы можете поместить помощника в свою папку lib и включить их туда где угодно. Вот так: lib/some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end
person railscard    schedule 18.09.2011
comment
должно быть 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
comment
В итоге я последовал вашему совету и переделал свой код, чтобы мне не пришлось использовать вспомогательный метод в модели. - 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