Ruby: 在基础 class 的上下文中执行方法
Ruby: Execute method in context of base class
我有大约 20 个不同的 Active Jobs which I now realise are each going to need a before_perform
method in which to set PaperTrail content outside the context of the controller。
我正计划将这个 before_perform
方法放在一个助手中,然后在每个作业中包含这个助手,但我收到一个错误:
undefined method `before_perform' for MyApp:JobHelpers:Module
我认为这是因为所讨论的模块只是一个模块,而不是一个活动作业。如何避免在我的每个活动作业中重复相同的 4 行 before_perform
方法?
Job_helper:
module MyApp
module JobHelpers
before_perform do |job|
# stuff to do
end
end
end
The_job:
require 'my_app/job_helpers'
class TheJob < ActiveJob::Base
include MyApp::JobHelpers
# Do more stuff
end
像这样重写你的助手:
module MyApp
module JobHelpers
extend ActiveSupport::Concern
included do
# inside this you can call ActiveJob helpers
before_perform do
# stuff to do
end
end
end
end
我用了一个included
callback to achieve my desired goal. I found a better description of the included callback than I could ever give in another answer here。
虽然其他答案相似,但请在下面找到适合我的解决方案:
module MyApp
module JobHelpers
def self.included(job_class)
job_class.before_perform do |job|
# work to be completed
end
end
end
end
我有大约 20 个不同的 Active Jobs which I now realise are each going to need a before_perform
method in which to set PaperTrail content outside the context of the controller。
我正计划将这个 before_perform
方法放在一个助手中,然后在每个作业中包含这个助手,但我收到一个错误:
undefined method `before_perform' for MyApp:JobHelpers:Module
我认为这是因为所讨论的模块只是一个模块,而不是一个活动作业。如何避免在我的每个活动作业中重复相同的 4 行 before_perform
方法?
Job_helper:
module MyApp
module JobHelpers
before_perform do |job|
# stuff to do
end
end
end
The_job:
require 'my_app/job_helpers'
class TheJob < ActiveJob::Base
include MyApp::JobHelpers
# Do more stuff
end
像这样重写你的助手:
module MyApp
module JobHelpers
extend ActiveSupport::Concern
included do
# inside this you can call ActiveJob helpers
before_perform do
# stuff to do
end
end
end
end
我用了一个included
callback to achieve my desired goal. I found a better description of the included callback than I could ever give in another answer here。
虽然其他答案相似,但请在下面找到适合我的解决方案:
module MyApp
module JobHelpers
def self.included(job_class)
job_class.before_perform do |job|
# work to be completed
end
end
end
end