Rails 3 View вспомогательный метод в Model - PullRequest
8 голосов
/ 19 сентября 2011

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

Ответы [ 3 ]

41 голосов
/ 19 сентября 2011

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

ApplicationController.helpers.your_helper_method

ИЛИ

YourController.helpers.your_helper_method

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

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

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

9 голосов
/ 19 сентября 2011

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

module SomeHelper
  def somedef
    #your code there
  end
end
6 голосов
/ 19 сентября 2011

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

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

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

...