我有一个Rails(4+)非典型用例,其中一个控制器动作需要使用另一个控制器动作的逻辑......
这个问题是相关的: Rails: call another controller action from a controller 但它的答案仅解决了重定向到另一个控制器或将渲染委托给另一个控制器的情况,但我需要使用一些数据转换来自另一个控制器的逻辑并将转换后的结果返回给调用控制器......
预赛: My Rails应用程序依赖于几个本地Rails引擎,它们在主应用程序Gemfile中加载:
gem 'my_engine', :path => '../my_engine'
这些Engines使用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
如何更改我的引擎,完成新的用例以及如何从主应用程序控制器以串行方式执行这些引擎控制器操作?
答案 0 :(得分:1)
回答自己:
您应该将数据转换逻辑从Engine的控制器外包到您的Engine的帮助器中,或者在:
lib/my_engine/my_engine.rb
然后在引擎的控制器中调用此逻辑,并在主应用程序控制器中调用新的用例。