覆盖方法Ruby

时间:2018-01-26 20:55:46

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我想在Rails应用程序中覆盖Gem中的方法:config/initializers/oauth.rbhttps://github.com/AzureAD/omniauth-azure-activedirectory/blob/master/lib/omniauth/strategies/azure_activedirectory.rb

我尝试将文件添加到module OmniAuth module Strategies # A strategy for authentication against Azure Active Directory. class AzureActiveDirectory def request_phase debugger "www.hans.com" end end end end

使用代码:

[Chunk (parent)] 
    ====> [Chunk (depends on existence of parent for this to load)]

但是这种方法似乎不起作用,实际上没有任何东西被覆盖。我错了什么?谢谢

1 个答案:

答案 0 :(得分:2)

在编写“猴子补丁”样式更改时,您需要确保正确加载它们。测试这个的一种方法是,在完成所有工作之后,询问Ruby以找出实际使用的方法:

OmniAuth::Strategies::AzureActiveDirectory.instance_method(:‌​request_phase).sourc‌​e_location

instance_method调用返回一个对象,其中包含有关该方法的信息,source_location属性会告诉您定义的位置。

如果你的方法是好的,那么你就把它装好了。如果不是,您可能需要检查您是否在正确的时间挂钩。