Rails - 包含一个模块而不使用 include 这个词
Rails - include a module without using the word include
我在审计中注意到 gem 你可以这样做:
class User < ActiveRecord::Base
# All fields
# audited
# Single field
# audited only: :name
# Multiple fields
# audited only: [:name, :address]
我正在尝试复制这种行为,但运气不佳,我正在使用此处的说明来扩展我的模块:
这是我的 class:
class Thing < ApplicationRecord
audited only: :name
end
我的模块:
module Audited
extend ActiveSupport::Concern
def ClassMethods
def audited(options = {})
class_attribute :audited_options
self.audited_options = options
after_save :audit
end
end
def audit
puts self.changed_attributes
puts self.audited_options
end
end
::ActiveRecord::Base.send(:include, Audited)
我得到错误(仅在第一次加载时,然后错误停止,但模块仍然没有输出。
NoMethodError (undefined method `audited' for #<Class:0x00007fae51b15ab0>):
只有在执行文件时,您的模块才会包含在 ActiveRecord::Base
中。假设您正在使用 rails 自动加载,它仅在调用 Audited
时执行。
您需要在加载过程(初始化程序)中的某处要求文件或执行 ::ActiveRecord::Base.send(:include, Audited)
。
我在审计中注意到 gem 你可以这样做:
class User < ActiveRecord::Base
# All fields
# audited
# Single field
# audited only: :name
# Multiple fields
# audited only: [:name, :address]
我正在尝试复制这种行为,但运气不佳,我正在使用此处的说明来扩展我的模块:
这是我的 class:
class Thing < ApplicationRecord
audited only: :name
end
我的模块:
module Audited
extend ActiveSupport::Concern
def ClassMethods
def audited(options = {})
class_attribute :audited_options
self.audited_options = options
after_save :audit
end
end
def audit
puts self.changed_attributes
puts self.audited_options
end
end
::ActiveRecord::Base.send(:include, Audited)
我得到错误(仅在第一次加载时,然后错误停止,但模块仍然没有输出。
NoMethodError (undefined method `audited' for #<Class:0x00007fae51b15ab0>):
只有在执行文件时,您的模块才会包含在 ActiveRecord::Base
中。假设您正在使用 rails 自动加载,它仅在调用 Audited
时执行。
您需要在加载过程(初始化程序)中的某处要求文件或执行 ::ActiveRecord::Base.send(:include, Audited)
。