【发布时间】:2014-06-12 00:56:05
【问题描述】:
我正在使用出色的 twitter-bootstrap-rails gem。该 gem (NavbarHelper) 中有一个帮助程序,用于使用 Ruby 帮助程序生成 Bootstrap 导航栏。我想对 gem 进行修补,以使下拉列表中没有插入符号。
于是,我查了源码,找到了相关方法here。我所要做的就是覆盖它。我在 config/initializers 中创建了一个名为 navbar.rb 的新文件,其内容如下:
NavbarHelper.module_eval do
def name_and_caret(name)
"HELLO WORLD"
end
end
据推测,所有下拉标题都应该在我的应用程序中呈现为“HELLO WORLD”(正如 gem 源代码所引用的那样)。但是,这并没有发生,并且 gem 似乎根本没有被猴子补丁。
我尝试将 puts NavbarHelper.methods - Object.methods 放在初始化程序文件中,但没有结果,这让我认为 Rails 在初始化程序之前没有正确加载 gem。我还检查并确认 gem 没有为其助手使用自动加载。
编辑
我的Gemfile 以下列方式包含gem,这可能会使情况复杂化:
gem 'twitter-bootstrap-rails', git: 'git://github.com/seyhunak/twitter-bootstrap-rails.git', branch: 'bootstrap3'
我不确定这个特定版本是否意味着猴子补丁不起作用。
编辑#2
我的系统上似乎只有一个版本的 gem,所以我认为这不是问题所在。另外,我尝试将require 'twitter-bootstrap-rails 放在初始化程序文件的顶部,但没有结果。
【问题讨论】:
-
以更直接的方式尝试猴子修补 -
module NavbarHelper\ndef name_and_caret(name)\n...\nend\nend... 还要确保你requirenavbar_helper在运行此代码之前。 -
@UriAgassi 我尝试了这种方法,但没有奏效。另外,我不确定 require 语法,但我尝试过要求文件顶部的 gem,但这也不起作用。
标签: ruby-on-rails ruby ruby-on-rails-4 monkeypatching