Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a method from another controller

If I've got a method in a different controller to the one I'm writing in, and I want to call that method, is it possible, or should I consider moving that method to a helper?

like image 277
cjm2671 Avatar asked Nov 22 '11 10:11

cjm2671


People also ask

Can we call method from one controller to another controller?

Yes, you can call a method of another controller. The controller is also a simple class.


2 Answers

You could technically create an instance of the other controller and call methods on that, but it is tedious, error prone and highly not recommended.

If that function is common to both controllers, you should probably have it in ApplicationController or another superclass controller of your creation.

class ApplicationController < ActionController::Base   def common_to_all_controllers     # some code   end end  class SuperController < ApplicationController   def common_to_some_controllers     # some other code   end end  class MyController < SuperController   # has access to common_to_all_controllers and common_to_some_controllers end  class MyOtherController < ApplicationController   # has access to common_to_all_controllers only end 

Yet another way to do it as jimworm suggested, is to use a module for the common functionality.

# lib/common_stuff.rb module CommonStuff   def common_thing     # code   end end  # app/controllers/my_controller.rb require 'common_stuff' class MyController < ApplicationController   include CommonStuff   # has access to common_thing end 
like image 117
edgerunner Avatar answered Oct 06 '22 00:10

edgerunner


Try and progressively move you methods to your models, if they don't apply to a model then a helper and if it still needs to be accessed elsewhere put in the ApplicationController

like image 35
Joseph Le Brech Avatar answered Oct 05 '22 23:10

Joseph Le Brech