76

In Rails MVC, can you call a controller's method from a view (as a method could be called call from a helper)? If yes, how?

Jon Schneider
  • 25,758
  • 23
  • 142
  • 170
Manish Shrivastava
  • 30,617
  • 13
  • 97
  • 101

4 Answers4

172

Here is the answer:

class MyController < ApplicationController
  def my_method
    # Lots of stuff
  end
  helper_method :my_method
end

Then, in your view, you can reference it in ERB exactly how you expect with <% or <%=:

<% my_method %>
Hawkins
  • 700
  • 6
  • 21
sailor
  • 7,834
  • 3
  • 26
  • 34
23

You possibly want to declare your method as a "helper_method", or alternatively move it to a helper.

What do helper and helper_method do?

Community
  • 1
  • 1
Pavling
  • 3,933
  • 1
  • 22
  • 25
9

make your action helper method using helper_method :your_action_name

class ApplicationController < ActionController::Base
  def foo
    # your foo logic
  end
  helper_method :foo

  def bar
    # your bar logic
  end
  helper_method :bar
end

Or you can also make all actions as your helper method using: helper :all

 class ApplicationController < ActionController::Base
   helper :all

   def foo
    # your foo logic
   end

   def bar
    # your bar logic
   end
 end

In both cases, you can access foo and bar from all controllers.

przbadu
  • 5,769
  • 5
  • 42
  • 67
9

Haven't ever tried this, but calling public methods is similar to:

@controller.public_method

and private methods:

@controller.send("private_method", args)

See more details here

Taryn
  • 242,637
  • 56
  • 362
  • 405
Wahaj Ali
  • 4,093
  • 3
  • 23
  • 35