如何从 Rails 主应用程序控制器执行 Ruby on Rails 引擎的控制器操作?



我有一个Rails(4+)非典型用例,其中一个控制器操作需要使用另一个控制器动作的逻辑。。。

这个问题是相关的:Rails:从控制器调用另一个控制器操作但它的答案只涉及重定向到另一个控制器或将渲染委派到另一控制器的情况,但我需要使用其他控制器的一些数据转换逻辑,并将转换后的结果返回到调用控制器。。。

准备工作:我的Rails应用程序依赖于几个本地Rails引擎,这些引擎加载在主要应用程序Gemfile中,带有:

gem 'my_engine', :path => '../my_engine'

这些引擎使用MVC和路由实现了输入数据转换REST服务。他们使用了主应用程序的一些模型(用于配置),扩展了主应用的基本控制器,使其与主应用程序等具有相同的REST授权

用例:现在我的新用例需要我在主应用程序控制器中使用这些引擎-控制器操作,以串行方式用这些引擎转换输入数据,并将每次执行的转换结果返回给调用控制器。

伪码

主要应用:app/controllers/api/main_app_controller.rb:

class Api::MainAppController < ApplicationController
def index
result = params['data']
my_engines.each do |my_engine|
result = my_engine.execute_engine_controller_action(input)
end          
render result
end
end

我必须如何更改我的引擎,以满足新的用例,以及我如何从主应用程序控制器以串行方式执行这些引擎控制器操作?

我自己的答案:

您应该将引擎控制器中的数据转换逻辑输出到引擎的助手中,或者输入:

lib/my_engine/my_engine.rb

然后在引擎的控制器中调用此逻辑,对于新用例,也在主应用程序控制器中调用。

最新更新