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?
-
1Could you add facts to the problem you want to solve by calling the method of another controller? Currently it is pretty vague, and the solution will depend on the problem.mliebelt– mliebelt2011-11-22 11:01:05 +00:00Commented Nov 22, 2011 at 11:01
-
Indeed, please elaborate what you are trying to solve. what is the shared method doing?nathanvda– nathanvda2011-11-22 11:21:39 +00:00Commented Nov 22, 2011 at 11:21
4 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
3 Comments
include GoodSuggestion Thanks @jimwormTry 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
5 Comments
/lib. Only view-code should live in a helper.you'll get to the point .....lib (or make a gem).I don't know any details of your problem, but maybe paths could be solution in your case (especially if its RESTful action).
http://guides.rubyonrails.org/routing.html#path-and-url-helpers