class UsersController < ApplicationController
def create
# call the action do_something from ImagesController
# continue in the normal flow
end
end
class ImagesController < ApplicationController
def do_something
...
end
end
我想在do_something
ImagesController
中调用UsersController
中的操作,但在执行后我想继续执行create
操作的正常流程,很少问题:
ImagesController
的实例,然后调用该操作或是否有另一种方式?答案 0 :(得分:2)
你可以在技术上创建另一个控制器的实例并在其上调用方法,但它很繁琐,容易出错并且不推荐使用。
如果该函数对两个控制器都是通用的,那么你应该在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
另一种方法是
# 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
答案 1 :(得分:0)
那就是说。这是不好的做法。非常糟糕的做法。
您要做的是将您要调用的控制器中的逻辑提取到服务对象中或将其移动到模型中。另外,您也可以让您的第一个控制器继承您尝试调用的控制器。
那么,如何调用控制器?
TheController.new.dispatch(:index, request)