Технически вы можете создать экземпляр другого контроллера и вызывать методы для него, но это утомительно, подвержено ошибкам и настоятельно не рекомендуется.
Если эта функция является общей для обоих контроллеров, вероятно, она должна быть в ApplicationController
или другом контроллере суперкласса вашего создания.
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
Еще один способ сделать это, как предложено jimworm , - использовать модуль для общей функциональности.
# 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