在Rails 4升级后,ActiveRecord :: Base#assign_attributes monkey patch不起作用

时间:2016-06-22 14:28:23

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我正在将现有的Rails 3升级升级到Rails 4.这个应用程序猴子补丁ActiveRecord::Base#assign_attributes并且在Rails 3中运行良好;现在在Rails 4中,猴子修补的代码永远不会被调用。

我有一个配置初始化程序,它需要lib目录中的猴子修补代码,我可以看到它在启动初始化过程中运行了一次。

这是lib目录中猴子补丁文件的简化版本。

# encoding: UTF-8
module ActiveRecord
  class Base
    alias_method :default_assign_attributes, :assign_attributes

    def assign_attributes(new_attributes)
      # Do some custom stuff here
      default_assign_attributes(new_attributes)
    end

  end
end

1 个答案:

答案 0 :(得分:1)

这个(以及许多其他)方法在Rails 4中被分解为关注点。这个方法进入了ActiveRecord::AttributeAssignment。你应该对这个问题进行修补,而不是ActiveRecord::Base

也就是说,如果你想定义自己的assign_attributes方法,你应该通过猴子修补核心类来定义你自己的关注点,而不是