2016-06-08 72 views
1

我有一个Rails(4+)不典型的用例,其中一个控制器动作需要使用另一个控制器操作的逻辑...如何从Rails主应用程序控制器执行Ruby on Rails引擎的控制器操作?

这个问题是相关的: Rails: call another controller action from a controller 但其答案只能解决重定向到的情况下另一个控制器或委托渲染到另一个控制器,但我需要使用一些数据从另一个控制器转换逻辑,并得到转换结果反馈给呼叫控制器...

预赛: 我的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 

如何做我必须改变我的引擎,以满足新的使用情况以及我如何在执行这些发动机控制器动作从主应用程序控制器的串行方式?

回答

1

回答自己:

你应该出源中的数据将来自发动机的控制逻辑到您的引擎或一个帮手:

lib/my_engine/my_engine.rb 

然后把这个逻辑的控制器引擎以及主应用程序控制器中的新用例。