我正在学习RoR,显然Spree和一些事情我不清楚。我也不完全熟悉Rails引擎。
我的问题是,我应该从Spree github页面复制所有控制器和路由,然后覆盖它们,还是它们已经通过引擎"启动"了?
此外,我注意到有些人使用Deface来覆盖他们自己应用程序上的内容。从github代码复制/粘贴然后修改它不是更容易吗?或者它有一些技巧?
感谢
gem的全部思想是,它们是包分发机制,您可以使用它来代替复制粘贴代码。
大多数现代语言都有某种包分发。Ruby选择的包管理器是Bundler。
应该始终使用它而不是复制粘贴,因为:
- 复制粘贴容易出错且乏味
- 您不会用供应商代码来膨胀您的代码存储库,这样更容易维护
- 包管理器可以进行依赖关系树解析,以确保您的依赖关系彼此兼容
- 现在不是1995年,复制粘贴图书馆会让人怀疑你的能力
如果你出于任何原因需要修改gem,你可以分叉存储库并告诉bundler使用你的分叉。但在大多数情况下,这是最后的手段,因为Ruby是一种非常灵活的语言。
我的问题是我应该从Spree复制所有控制器和路由吗github页面,然后覆盖它们,否则它们已经"启动"通过发动机?
否。只需登上宝石。很可能它是非常可配置的,并提供了根据您的意愿定制它的选项,而无需更改任何gems代码。
或者在许多情况下,您可以只使用面向对象编程来配置gem提供的控制器的自己的子类型。
Deface用于在视图渲染后修改视图。它基本上是使用正则表达式的一个更精细的版本,因此,如果问题可以通过使用分部或帮助程序来使代码更模块化来首先解决,那么它就相当棘手了。它与路由或控制器无关。