Ale*_*kin 2 ruby-on-rails ruby-on-rails-3.2
我有一个控制器,它调用另一个类(例如,突变)来执行某些操作。我希望能够指示此突变与控制流交互,例如redirect_to或显示flash通知。在伪代码中,这看起来像:
my_controller.rb
\n\ndef create\n MyCreateMutation.run!(params).tap do |result|\n render result ? :success : :error\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\nmy_mutation.rb
\n\ndef execute **params\n begin\n # do creation\n rescue => e\n # \xe2\x87\x93\xe2\x87\x93\xe2\x87\x93\xe2\x87\x93\xe2\x87\x93\n flash[:error] = e.message\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\n上面代码的问题在于flash当前控制器的本地代码。我知道,我可以:
flash它;current在最顶层的应用程序控制器上声明静态方法并使用此 \xe2\x80\x9cglobal\xe2\x80\x9d 变量;caller数组和constantize找到的最顶层的控制器;以上所有内容对我来说似乎都太过分了。
\n\n如果当前控制器出现在堆栈上(堆栈上的某个地方有一个方法ApplicationController) ,是否有一种通用的方法来获取当前控制器?
好吧,对于未来的访客:我最终坚持current在最顶部声明类变量ApplicationController:
cattr_accessor :current
before_filter { ApplicationController.current = self }
after_filter { ApplicationController.current = nil }
Run Code Online (Sandbox Code Playgroud)
之后,我可以通过以下方式获得当前的控制器实例:
ApplicationController.current
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |