2016-06-08 89 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 

然後把這個邏輯的控制器引擎以及主應用程序控制器中的新用例。