加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读