【问题标题】:Calling a ControllerA Action from Another ControllerB Action passing some params for ControllerA Action from ControllerB Action in Ruby on Rails在 Ruby on Rails 中,从另一个控制器动作调用 ControllerA 动作,从控制器动作中传递控制器动作的一些参数
【发布时间】:2019-06-28 19:26:38
【问题描述】:

我想从另一个ResultController#actionb 调用TestController#actiona,传递actiona 的参数以及rails 中的调用。 有谁知道实现这一目标的最有效方法是什么?

我尝试过像下面的代码那样调用方法,但出现错误。我做错了什么?

示例伪代码:

 class TestController  < ApplicationController 
    def actiona
       # @value = do_something_with(params) // we are doing something with params
       # render resource: @value, status: 201
    end
end
 class ResultController  < ApplicationController 
    def actionb
        # new_params = params + some_other_things // building new params
        # @new_value = TestController.new.actiona(new_params) // we are passing the new_params
        # render resource: @new_value, status: 201
    end
end

我希望对ResultController#actionb 的调用使用params 调用TestController#actiona 并呈现相同的@value,如果我们直接调用它,TestController#actiona 会返回。

【问题讨论】:

  • 一个控制器动作并不意味着被另一个控制器的动作调用。控制器操作旨在处理单个请求-响应周期。或许可以考虑创建一个提供共享功能的服务。
  • 谢谢,我要走这条路,我在那里打错字了,我要在那里实例化 TestController 如下TestController.new.actiona(new_params)

标签: ruby-on-rails ruby performance controller ruby-on-rails-5.2


【解决方案1】:

actiona 是一个实例方法。您不能在 TestController 类上调用 actiona。 此外,如果它有效,您将执行对renderactionaactionb 的调用,这没有任何意义。对控制器操作的调用必须只调用一次render

如果您想从actionb 执行actiona,您可以使用带有参数的redirect_to 触发重定向。

如果你只想渲染TestController的视图,从actionb,你可以在使用render方法时指定期望的视图。

如果你只是想重用一些代码,你可以将那部分代码提取到关注点中。

【讨论】:

  • 谢谢,我将创建一个服务并将两个控制器之间共享的功能抽象到其中。我在那里打错字了,我要在那里实例化 TestController 如下TestController.new.actiona(new_params)
猜你喜欢
  • 2011-08-11
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多