gpt4 book ai didi

ruby-on-rails - 如何获取当前 Controller 实例

转载 作者:行者123 更新时间:2023-12-03 09:19:44 27 4
gpt4 key购买 nike

我有一个 Controller ,它调用另一个类(例如,突变)来执行某些操作。我希望能够指示此突变与控制流交互,例如。 G。到redirect_to或显示flash通知。在伪代码中,这看起来像:

my_controller.rb

def create
MyCreateMutation.run!(params).tap do |result|
render result ? :success : :error
end
end

my_mutation.rb

def execute **params
begin
# do creation
rescue => e
# ⇓⇓⇓⇓⇓
flash[:error] = e.message
end
end

上述代码的问题是 flash 对于当前 Controller 来说是本地的。我知道,我可以:

  • 将当前 Controller 实例传递给突变并对其调用flash
  • 在最顶层的应用程序 Controller 上声明静态current方法并使用这个“全局”变量;
  • 解析caller数组并常量找到的最上面的 Controller ;
  • 引入一个中间件并将当前 Controller 实例保存在某处。

以上所有内容对我来说似乎都太过分了。

如果当前 Controller 出现在堆栈上(堆栈上的某个位置有一个 ApplicationController 方法),是否有一种通用的方法来获取当前 Controller

最佳答案

好吧,对于 future 的访问者:我最终坚持在最顶部的 ApplicationController 上声明 current 类变量:

cattr_accessor :current
before_filter { ApplicationController.current = self }
after_filter { ApplicationController.current = nil }

之后,我可以通过以下方式获得当前的 Controller 实例:

ApplicationController.current

关于ruby-on-rails - 如何获取当前 Controller 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com