猴子修补ActiveRecord的“ where”方法

时间:2019-03-01 09:34:45

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

我正在尝试向ActiveRecord的where方法中添加一些其他功能。我通过做猴子补丁达到了一半,但是面临链查询的问题。

例如:

  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

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

0 个答案:

没有答案