从 Rails 中的 gem 重写模块方法

2024-01-04

will_paginate gem 在我的 Oracle 版本上被破坏了。默认paginate_by_sqlWillPaginate 模块中的方法正在向查询中插入额外的“AS”并导致查询失败。

代码本身很容易修复,但我不确定让 Rails 接受我的更改的最佳方法。

我不想更改 gem 本身的代码,因为这会使我的代码在其他机器上损坏。

我尝试创建一个 lib/test.rb 文件,其中包含:

module WillPaginate
  def paginate_by_sql
    (my code goes here)
  end
end

并从environment.rb 中要求它,但它没有接受我的更改。 我也尝试从controllers/application.rb 中要求它,但同样,没有接受我的更改。

暂时,我通过覆盖特定模型本身内的方法来使其工作,但这有点像黑客,意味着我无法在该项目中的任何其他模型上使用它。

我确信有一个简单的方法可以做到这一点,但我没有运气使用谷歌来追踪它。


更简洁的解决方案:

WillPaginate::Finder::ClassMethods.module_eval do
 def paginate_by_sql sql, options
   # Your code here
 end
end

将代码放入 config/initializers 中的初始化程序文件中。这是放置加载环境时需要运行的代码的正确位置。它还可以更好地组织您的代码,使每个文件的意图更清晰,从而更容易追踪错误。不要弄乱环境。rb!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Rails 中的 gem 重写模块方法 的相关文章

随机推荐