ruby-on-rails – 将额外的参数传递给Rails观察者
发布时间:2020-12-17 03:53:41 所属栏目:百科 来源:网络整理
导读:我在帐户模型中有几种方法:支付,接收,退款等我希望我的AccountObserver观看.但我想将额外的对象传递给我的AccountObserver. 例如,在我的帐户模型中,我想定义: def pay ... notify_observers(:after_pay,payee,amount)end 我该怎么做? 谢谢. 解决方法 不要
我在帐户模型中有几种方法:支付,接收,退款等我希望我的AccountObserver观看.但我想将额外的对象传递给我的AccountObserver.
例如,在我的帐户模型中,我想定义: def pay ... notify_observers(:after_pay,payee,amount) end 我该怎么做? 谢谢. 解决方法
不要覆盖notify_observers.修补核心类是一个非常糟糕的主意.相反,你应该做的是:
不要在模型上调用仅限于方法名称的instance method,而是自己调用类方法: # Notify list of observers of a change. def notify_observers(*arg) observer_instances.each { |observer| observer.update(*arg) } end 它将您提供给它的任何参数传递给观察者的#update方法,您可以在自己的观察者类中覆盖它. 默认值不接受任何无关的参数,但不是太复杂: def update(observed_method,object,&block) #:nodoc: return unless respond_to?(observed_method) return if disabled_for?(object) send(observed_method,&block) end 所以只需将其添加到您的观察者,例如: def update(observed_method,*args) return unless respond_to?(observed_method) return if disabled_for?(object) send(observed_method,*args) end def after_pay(payee,amount) ... end 并致电 Payee.notify_observers(:after_pay,amount) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |