1

我正在使用 Rails gem SimpleForm,但我认为我的问题可能适用于任何 gem。

https://github.com/plataformatec/simple_form

它有很多很棒的功能和自定义,但我希望更进一步。例如,我真的希望生成的标记没有插入默认类,但我仍然希望能够手动插入我自己的。我发现我可以通过注释掉 gem 文件中的行来删除一些类。然而,这不在我的项目范围内——我想要一个 DRY 解决方案,当我部署到生产环境时,它会保留在我的项目中,最好不必打包我所有的 gem。

我想这是一种适用于任何 gem 的常见情况,我应该能够通过在我的项目中添加覆盖 gem 的自定义文件来完全或部分覆盖任何 gem ......但我不确定如何。

任何帮助,将不胜感激!谢谢。

4

1 回答 1

0

你说的是猴子补丁吗?假设您的 gem 在文件中有一个类

# simple_form_gem/lib/some_file.rb
class A
  def some_method
    puts 'A'
  end
end

如果要更改 #some_method 的输出,则可以创建一个初始化文件并执行

# config/initializers/my_monkey_patch_for_simple_form_gem.rb
class A
  def some_method
    puts 'duck punching'
  end
end

你的猴子补丁只会影响 A#some_method,而不是 A 中的其他方法。只要确保你的猴子补丁的输出不会破坏 gem 中的其他东西。

于 2010-11-16T23:41:02.193 回答