ruby-on-rails - 猴子修补 ActiveRecord "where" 方法
问题描述
我正在尝试为where
ActiveRecord 中的方法添加一些额外的功能。我通过做猴子补丁达到了一半,但面临链查询的问题。
前任:
User.where(id: 10, name: 'Blob')
当我执行上面的代码时,我的新功能按预期工作。它触发修改where
的方法并将查询参数作为
query_params = { id: 10, name: 'Blob' }
User.where(id: 10).where(name: 'Blob')
在这种情况下,我只得到
query_params = { id: 10 }
我只是打印查询参数并委托给超类:
def where(query, *values)
query.each do |key, value|
if value.is_a?(Array) and value.flatten != value
Rails.logger.debug "Where Clause Params"
Rails.logger.debug "#{query}"
Rails.logger.debug "#{caller.join("\n")}"
break
end
end
super
end
这就是我将修改后的where
文件扩展到 ApplicationRecord的方式
ApplicationRecord.extend CoreExtensions::ApplicationRecord::WhereLog
如果有人提供帮助,那就太好了。
解决方案
推荐阅读
- groovy - 如何在 groovy 中将 24 小时格式转换为 12 小时格式
- javascript - Fabric.js 的“拖放区”?
- pytest - 如何控制测试流程
- python - 跨熊猫数据框的列和行查找所有重复模式的所有索引/实例
- android - 使用 createUserWithEmailAndPassword 进行 Android Firebase 身份验证
- validation - 异步 SAGA 模式中的验证 - CQRS 和 DDD
- asp.net-mvc - 使用 oracle 数据库运行项目时出错
- python - 如何创建重复的 plt.show() 实例?
- mysql - 选择排名查询后的 MySql Where 条件
- javascript - 夏令时的Javascript日期计算错误