首页 > 解决方案 > 猴子修补 ActiveRecord "where" 方法

问题描述

我正在尝试为whereActiveRecord 中的方法添加一些额外的功能。我通过做猴子补丁达到了一半,但面临链查询的问题。

前任:

  1. User.where(id: 10, name: 'Blob')

当我执行上面的代码时,我的新功能按预期工作。它触发修改where的方法并将查询参数作为 query_params = { id: 10, name: 'Blob' }

  1. 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

如果有人提供帮助,那就太好了。

标签: ruby-on-railsactiverecordruby-on-rails-5

解决方案


推荐阅读