В Rails, как вызывать одни и те же методы для каждой задачи и для модели? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть модель и довольно много проблем, я хочу вызывать один и тот же метод из каждой проблемы и из самой модели, и мне было интересно, возможно ли это.

Итак, допустим, у меня естьмодель, подобная этой, имеет три проблемы и метод 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?Возможно ли это?

Спасибо.

1 Ответ

2 голосов
/ 15 апреля 2019

Могу ли я запустить все 3 задачи 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
...