Rails bootstrap gem monkeypatching方法不起作用

时间:2014-04-26 07:10:19

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

我正在使用优秀的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不起作用。

编辑#2

我的系统上似乎只有一个版本的gem,所以我不认为这是问题所在。另外,我尝试将require 'twitter-bootstrap-rails放在初始化文件的顶部,但没有结果。

1 个答案:

答案 0 :(得分:1)

问题是您在此模块上修补了该方法,但此时已包含该模块。尝试在application_helper.rb

中定义它
def name_and_caret(name)
  super("blub #{name}")
end