我正在使用Rails gem SimpleForm,但我认为我的问题可能适用于任何宝石。
https://github.com/plataformatec/simple_form
它有很多很棒的功能和定制,但我希望更进一步。例如,我真的希望生成的标记没有插入默认类,但我仍然希望能够手动插入我自己的类。我发现我可以通过在gem文件中注释掉行来删除一些类。然而,这不属于我的项目 - 我想要一个DRY解决方案,当我部署到生产环境时,它将与我的项目保持一致,最好不需要打包我的所有宝石。
我想这是一个常见的情况,可以应用于任何宝石,我应该能够完全或部分覆盖任何宝石可能通过在我的项目中添加海关文件覆盖宝石......但我不确定如何。
任何帮助将不胜感激!感谢。
答案 0 :(得分:0)
你在谈论monkey patching吗?假设您的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中的其他方法。只需确保你的猴子补丁的输出不会破坏宝石中的其他东西。