我正在使用优秀的twitter-bootstrap-rails宝石。该gem(NavbarHelper)中有一个帮助器,用于生成带有Ruby帮助器的Bootstrap导航栏。我想修补宝石,以便下拉列表不会有插入符号。
所以,我查看了源代码并找到了相关的方法here。我所要做的就是覆盖它。我在config / initializers中创建了一个名为navbar.rb
的新文件,其中包含以下内容:
NavbarHelper.module_eval do
def name_and_caret(name)
"HELLO WORLD"
end
end
据推测,所有下拉标题都应该在我的应用程序中呈现为“HELLO WORLD”(由gem源引用)。然而,这种情况并没有发生,宝石似乎根本没有被打破过。
我尝试将puts NavbarHelper.methods - Object.methods
放在初始化程序文件中,并且没有结果,这让我觉得Rails没有在初始化程序之前正确加载gem。我还检查并验证了宝石没有使用自动装载作为其助手。
令我感到困惑的是,Gemfile
以下列方式包含了宝石:
gem 'twitter-bootstrap-rails', git: 'git://github.com/seyhunak/twitter-bootstrap-rails.git', branch: 'bootstrap3'
我不确定这种特定版本是否意味着monkeypatching不起作用。
我的系统上似乎只有一个版本的gem,所以我不认为这是问题所在。另外,我尝试将require 'twitter-bootstrap-rails
放在初始化文件的顶部,但没有结果。
答案 0 :(得分:1)
问题是您在此模块上修补了该方法,但此时已包含该模块。尝试在application_helper.rb
中定义它def name_and_caret(name)
super("blub #{name}")
end