扩展 ActiveRecord::Base 无效
Extending ActiveRecord::Base not working
我正在尝试使用一些审计功能来扩展 ActiveRecord::Base。当用户保存模型时,我更新两列 - created_by_user_id and/or updated_by_user_id - 使用他们的用户 ID。 user_id 来自 RequestRegistry。
我就是无法让它工作。请参阅下面的代码。
module AuditTrail
extend ActiveSupport::Concern
included do
before_save :update_audit_fields
end
private
def update_audit_fields
puts "Updating audit fields" # note this is not being printed out!
fields_to_update.each do |column|
column = column.to_s
# if has_attribute?(column)
# self[column] = RequestRegistry.current_user.id
puts "Updating #{column} with user_id some user id"
# end
end
end
def fields_to_update
if self.new_record?
audit_fields
else
update_audit_fields
end
end
def audit_fields
create_audit_fields + update_audit_fields
end
def update_audit_fields
[:updated_by_user_id]
end
def create_audit_fields
[:created_by_user_id]
end
end
ActiveRecord::Base.send(:include, AuditTrail)
class RequestRegistry
extend ActiveSupport::PerThreadRegistry
attr_accessor :current_user
end
当我将其简化为下面的代码时。 puts 语句打印出第一段代码中没有任何内容打印出来的地方。此外,控制台未显示代码中的任何中断或错误。
module AuditTrail
extend ActiveSupport::Concern
included do
before_save :update_audit_fields
end
private
def update_audit_fields
puts "Updating audit fields"
end
end
ActiveRecord::Base.send(:include, AuditTrail)
我尝试慢慢扩展更简单的版本,但它随机停止工作。
如有任何想法,我们将不胜感激。
您重复了方法的定义 update_audit_fields。
在这种情况下,第二个定义用 puts.
覆盖你的方法
我正在尝试使用一些审计功能来扩展 ActiveRecord::Base。当用户保存模型时,我更新两列 - created_by_user_id and/or updated_by_user_id - 使用他们的用户 ID。 user_id 来自 RequestRegistry。
我就是无法让它工作。请参阅下面的代码。
module AuditTrail
extend ActiveSupport::Concern
included do
before_save :update_audit_fields
end
private
def update_audit_fields
puts "Updating audit fields" # note this is not being printed out!
fields_to_update.each do |column|
column = column.to_s
# if has_attribute?(column)
# self[column] = RequestRegistry.current_user.id
puts "Updating #{column} with user_id some user id"
# end
end
end
def fields_to_update
if self.new_record?
audit_fields
else
update_audit_fields
end
end
def audit_fields
create_audit_fields + update_audit_fields
end
def update_audit_fields
[:updated_by_user_id]
end
def create_audit_fields
[:created_by_user_id]
end
end
ActiveRecord::Base.send(:include, AuditTrail)
class RequestRegistry
extend ActiveSupport::PerThreadRegistry
attr_accessor :current_user
end
当我将其简化为下面的代码时。 puts 语句打印出第一段代码中没有任何内容打印出来的地方。此外,控制台未显示代码中的任何中断或错误。
module AuditTrail
extend ActiveSupport::Concern
included do
before_save :update_audit_fields
end
private
def update_audit_fields
puts "Updating audit fields"
end
end
ActiveRecord::Base.send(:include, AuditTrail)
我尝试慢慢扩展更简单的版本,但它随机停止工作。
如有任何想法,我们将不胜感激。
您重复了方法的定义 update_audit_fields。 在这种情况下,第二个定义用 puts.
覆盖你的方法