will_paginate gem 在我的 Oracle 版本上损坏了。 WillPaginate 模块中的默认 paginate_by_sql
方法是将额外的“AS”插入查询并导致查询失败。
代码本身很容易修复,但我不确定让 Rails 接受我的更改的最佳方法。
我不想更改 gem 本身的代码,因为那样会使我的代码在其他机器上损坏。
我尝试创建一个包含以下内容的 lib/test.rb 文件:
module WillPaginate
def paginate_by_sql
(my code goes here)
end
end
并从 environment.rb 请求它,但它没有接收我的更改。 我也尝试从 controllers/application.rb 中请求它,但同样没有获取我的更改。
暂时,我通过覆盖特定模型本身的方法让它工作,但这有点 hack,意味着我不能在这个项目中的任何其他模型上使用它。
我确信有一种简单的方法可以做到这一点,但我没有运气使用 Google 来追踪它。
最佳答案
更简洁的解决方案:
WillPaginate::Finder::ClassMethods.module_eval do
def paginate_by_sql sql, options
# Your code here
end
end
将代码放入 config/initializers 中的初始化文件中。这是放置加载环境时需要运行的代码的正确位置。它还可以更好地组织您的代码,使每个文件的意图更加清晰,从而更容易追踪错误。不要弄乱 environment.rb!
关于ruby-on-rails - 从 Rails 中的 gem 覆盖模块方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580314/