ruby-on-rails – Rails:如何访问Observer中的当前控制器?
发布时间:2020-12-17 03:28:06 所属栏目:百科 来源:网络整理
导读:我需要访问当前控制器或从观察者方法中刷新通知. class SomeObserver ActiveRecord::Observer observe :some_model cattr_accessor :current_controller def after_create(record) ... current_controller.flash[:notice] = "Some message!" endendclass App
我需要访问当前控制器或从观察者方法中刷新通知.
class SomeObserver < ActiveRecord::Observer observe :some_model cattr_accessor :current_controller def after_create(record) ... current_controller.flash[:notice] = "Some message!" end end class ApplicationController < ActionController::Base before_filter do SomeObserver.current_controller = self end ... end 解决方法
正如其他人所说,从观察者访问控制器有点违反了MVC原则.给定的答案也适合您的具体用例.
但是,如果您需要更通用的解决方案,您可能会尝试调整Rails Sweepers的工作方式. 扫描器是普通的观察者,但是如果从控制器动作调用观察者,它们提供对控制器的访问. 这是通过同时使用扫频机作为观察器和控制器滤波器来实现的,这很容易实现,因为观察者是单体(即它们包括Singleton模块) 简而言之,您必须这样做: >像往常一样创建观察者. class ApplicationController < ActionController::Base around_filter MyObserver.instance #,only: [...] end >将过滤器的方法添加到观察者: attr_accessor :controller def before(controller) self.controller = controller true #Don't forget this! end def after(controller) self.controller = nil end 现在您可以从观察者回调中访问控制器.但是,如果观察者在控制器动作之外被触发,则控制器为零. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |