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?
Yes, you can call a method of another controller. The controller is also a simple class.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With