我有一个模型和很多关注点,我想从每个关注点和模型本身调用相同的方法,我想知道这是否可能。
因此,假设我有一个像这样的模型,它涉及三个方面和一个setup_defaults方法。
class Item < ApplicationRecord
include ConcernOne
include ConcernTwo
include ConcernThree
def setup_defaults
# model code here
end
end
我希望在运行中的每个关注点以及模型中的关注点中都有一个setup_defaults
,所以看起来像这样:
module ConcernOne
extend ActiveSupport::Concern
def setup_defaults
# concern one code
end
end
module ConcernTwo
extend ActiveSupport::Concern
def setup_defaults
# concern two code
end
end
module ConcernThree
extend ActiveSupport::Concern
def setup_defaults
# concern three code
end
end
因此,我希望依次运行concern one code
,然后依次concern two code
和concern one code
,最后model code here
。
我已经尝试过使用super,但是它只运行最后一个关注代码,然后运行模型代码:
class Item < ApplicationRecord
include ConcernOne
include ConcernTwo
include ConcernThree
def setup_defaults
super
# model code here
end
end
我可以同时运行所有三个问题setup_defaults
,然后运行模型的setup_defaults
吗?这可能吗?
谢谢。
答案 0 :(得分:2)
我可以同时运行所有三个问题
setup_defaults
,然后运行模型的setup_defaults
吗?这可能吗?
是的,您已经拥有了。您唯一缺少的一点就是相互唤起您的担忧。
module ConcernOne
extend ActiveSupport::Concern
def setup_defaults
super if defined?(super) # do the same for other concerns and the model
puts 'one'
end
end
输出:
Item.new.setup_defaults
# >> one
# >> two
# >> three
# >> main