Rails 3 View вспомогательный метод в Model

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

3 ответа

Решение

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

module SomeHelper
  def somedef
    #your code there
  end
end

В вашей модели вы можете сделать что-то вроде следующего:

ApplicationController.helpers.your_helper_method

ИЛИ ЖЕ

YourController.helpers.your_helper_method

Лучшее решение - это рефакторинг вашего кода, чтобы вам вообще не приходилось вызывать вспомогательный код view из моделей. Это не путь RoR. Как отмечают другие, вы можете извлечь вспомогательный код в папку lib.

Смотрите это для получения дополнительной информации:

http://railscasts.com/episodes/132-helpers-outside-views

Если вам нужен помощник в методе класса, вам нужно extend не это include Это.

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

Просто будьте осторожны с помощниками вне контекста представления, поскольку помощники могут зависеть от controllerили что-то еще из контекста запроса, который не будет доступен в вашей модели.

Другие вопросы по тегам