【问题标题】:How to call controller's method如何调用控制器方法
【发布时间】:2013-01-03 10:45:50
【问题描述】:

我有一个与传入请求无关的功能(如获取、发布等)。

但我想遵循 MVC 约定并使其像模型控制器:

  • 在控制器部分,我将处理来自其他部分的收入请求,决定它应该从哪个模型中检索信息、授权、过滤等;

  • 在模型部分,我将存储信息、验证信息、过期信息等。

在 Rails 中,控制器的动作可以通过路由文件指示的收入请求来调用。

如果我创建了这样的控制器,对我来说问题是:

class SomeController < ApplicationController

  def some_action; end

end

如何从应用程序中的任何位置从SomeController 调用方法some_action

附:调用 SomeController.new.some_action 对我来说似乎不合适,因为我认为所有控制器都是 app 对象的一部分。

【问题讨论】:

    标签: ruby-on-rails controller


    【解决方案1】:

    您可以通过实例化控制器来做到这一点。

    SomeController.new.some_action
    

    然而,这并不是真正的 MVC 方式。我真的不知道你想用它做什么,但可能有更好的方法。例如,它可以像在模型中那样完成,因为数据的修改不应该属于控制器。

    【讨论】:

    • 对我来说似乎不对,所有控制器都是应用程序对象的一部分,如何调用它的问题。
    • 我写了你喜欢怎么称呼它。
    • 此时我们已经在应用程序的某个地方实例化了对象,创建对象的原因是什么?
    • 原因是你没有。每次请求到来时,都会实例化相应的控制器。其他都不是。
    • 您只能在请求调用该控制器时调用这些辅助方法。如果您在FooController 中有helper_method,并且您当前的请求被路由到BarController,则来自FooController 的帮助方法将不可用。 没有自动创建FooController 的实例
    【解决方案2】:

    我认为您可能应该创建一个 PORO,它将以某种方法封装此功能。因此,任何与逻辑相关的功能都应该在其中而不是在控制器中。然后你可以在任一控制器中调用它们。

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 2012-06-12
      • 2014-11-30
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2019-10-17
      相关资源
      最近更新 更多