【发布时间】:2015-01-29 17:51:46
【问题描述】:
在 Spree 框架中,Product 模型定义了一个名为 build_variants_from_option_values_hash 的私有方法。
此方法通常由after_create 回调在内部调用,并在类中声明为private。我想在正常的“创建”生命周期之外使用这个方法并直接调用它,但是由于它是私有声明的,不幸的是它在类之外是不可见的。
问题:有没有办法改变/修改方法的可见性而不重新定义它?
使用class_eval,我可以在private 区域之外的产品装饰器中重新定义方法,这确实可以解决问题。然而,我觉得完全复制整个方法只是为了改变它的可见性是一种不必要的“猴子修补”类型的方法。有没有更好的方法来做到这一点?
【问题讨论】:
-
为什么不直接用
send :private_method, *args发送 args 给它? -
@МалъСкрылевъ 哦,我明白了。出于某种原因,我没有考虑到这一点。谢谢,这似乎确实有效。
标签: ruby-on-rails ruby ruby-on-rails-4 methods visibility