LanguagesNamedAfterCofee
LanguagesNamedAfterCofee

Reputation: 5952

Rails 3 View helper method in Model

I have a class method in my model, and I need to access a method from one of my view helpers. Currently I am including include TalkHelper, but I still get a NoMethodError.

Upvotes: 8

Views: 17548

Answers (3)

Innerpeacer
Innerpeacer

Reputation: 1321

In your model, you can do something like the following:

ApplicationController.helpers.your_helper_method

OR

YourController.helpers.your_helper_method

The best solution is to refactor your code so that you don't need to call view helper code at all from models. It is not the RoR way. As others point out, you could extract the helper code to lib folder.

See this for more info:

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

Upvotes: 42

railscard
railscard

Reputation: 1848

You may place helper in your lib folder and include them anythere. Like this: lib/some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end

Upvotes: 8

numbers1311407
numbers1311407

Reputation: 34072

If you need the helper in a class method you'd need to extend it, not include it.

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

Just be careful with helpers outside of the view context, as helpers may depend on controller, or something else from the context of a request, which will not be available in your model.

Upvotes: 6

Related Questions