gpt4 book ai didi

ruby-on-rails - 从 Rails 中的 gem 覆盖模块方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:42 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com