Module ActionController::Helpers::ClassMethods
In: vendor/rails/actionpack/lib/action_controller/helpers.rb

The template helpers serve to relieve the templates from including the same inline code again and again. It’s a set of standardized methods for working with forms (FormHelper), dates (DateHelper), texts (TextHelper), and Active Records (ActiveRecordHelper) that’s available to all templates by default.

It’s also really easy to make your own helpers and it’s much encouraged to keep the template files free from complicated logic. It’s even encouraged to bundle common compositions of methods from other helpers (often the common helpers) as they’re used by the specific application.

  module MyHelper
    def hello_world() "hello world" end
  end

MyHelper can now be included in a controller, like this:

  class MyController < ActionController::Base
    helper :my_helper
  end

…and, same as above, used in any template rendered from MyController, like this:

Let’s hear what the helper has to say: <%= hello_world %>

Methods

Public Instance methods

Declare a helper:

  helper :foo

requires ‘foo_helper’ and includes FooHelper in the template class.

  helper FooHelper

includes FooHelper in the template class.

  helper { def foo() "#{bar} is the very best" end }

evaluates the block in the template class, adding method foo.

  helper(:three, BlindHelper) { def mice() 'mice' end }

does all three.

[Source]

    # File vendor/rails/actionpack/lib/action_controller/helpers.rb, line 57
57:       def helper(*args, &block)
58:         args.flatten.each do |arg|
59:           case arg
60:             when Module
61:               add_template_helper(arg)
62:             when String, Symbol
63:               file_name  = arg.to_s.underscore + '_helper'
64:               class_name = file_name.camelize
65:                 
66:               begin
67:                 require_dependency(file_name)
68:               rescue LoadError => load_error
69:                 requiree = / -- (.*?)(\.rb)?$/.match(load_error).to_a[1]
70:                 msg = (requiree == file_name) ? "Missing helper file helpers/#{file_name}.rb" : "Can't load file: #{requiree}"
71:                 raise LoadError.new(msg).copy_blame!(load_error)
72:               end
73: 
74:               add_template_helper(class_name.constantize)
75:             else
76:               raise ArgumentError, 'helper expects String, Symbol, or Module argument'
77:           end
78:         end
79: 
80:         # Evaluate block in template class if given.
81:         master_helper_module.module_eval(&block) if block_given?
82:       end

Declare a controller attribute as a helper. For example,

  helper_attr :name
  attr_accessor :name

makes the name and name= controller methods available in the view. The is a convenience wrapper for helper_method.

[Source]

     # File vendor/rails/actionpack/lib/action_controller/helpers.rb, line 104
104:       def helper_attr(*attrs)
105:         attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") }
106:       end

Declare a controller method as a helper. For example,

  helper_method :link_to
  def link_to(name, options) ... end

makes the link_to controller method available in the view.

[Source]

    # File vendor/rails/actionpack/lib/action_controller/helpers.rb, line 88
88:       def helper_method(*methods)
89:         methods.flatten.each do |method|
90:           master_helper_module.module_eval "def \#{method}(*args, &block)\ncontroller.send(%(\#{method}), *args, &block)\nend\n"
91:         end
92:       end

[Validate]