在 Rails 中,如何在每个关注点和模型中调用相同的方法?
In Rails, how to call same methods on every concern and in model?
我有一个模型和很多关注点,我想从每个关注点和模型本身调用相同的方法,我想知道这是否可能。
假设我有一个这样的模型,它有三个关注点和一个 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
我可以 运行 所有 3 个问题 setup_defaults
然后是模型的 setup_defaults
吗?这可能吗?
谢谢。
Can I run all 3 concerns setup_defaults
and then the model’s setup_defaults
? Is this possible?
是的,你已经拥有了。您唯一缺少的是互相提出您的担忧。
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
我有一个模型和很多关注点,我想从每个关注点和模型本身调用相同的方法,我想知道这是否可能。
假设我有一个这样的模型,它有三个关注点和一个 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
我可以 运行 所有 3 个问题 setup_defaults
然后是模型的 setup_defaults
吗?这可能吗?
谢谢。
Can I run all 3 concerns
setup_defaults
and then the model’ssetup_defaults
? Is this possible?
是的,你已经拥有了。您唯一缺少的是互相提出您的担忧。
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