【问题标题】:How to execute a Ruby on Rails Engine's controller action from a Rails main app controller?如何从 Rails 主应用程序控制器执行 Ruby on Rails 引擎的控制器操作?
【发布时间】:2016-06-08 14:51:18
【问题描述】:

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

这个问题是相关的: 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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    回答我自己:

    您应该将数据转换逻辑从引擎的控制器外包到引擎的助手中或:

    lib/my_engine/my_engine.rb
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多