ruby: 避免生成器中的重复方法

ruby: avoid duplicate method in genertors

我无法避免生成器中的重复代码。我曾尝试使用关注点但没有成功。谁能帮帮我?

我的 3 个生成器都使用相同的方法:

# Initialize the generator accepting attributes as arguments  
  def initialize(*args, &block)
    super
    @attributes = []
    model_attributes.each do |attribute|
      @attributes << Rails::Generators::GeneratedAttribute.new(*attribute.split(":")) if attribute.include?(":")
    end
  end

所以我在 lib/generators/concerns 中创建了一个名为 initializer.rb

的文件
module Initializer
  extend ActiveSupport::Concern

  # Initialize the generator accepting attributes as arguments  
  def initialize(*args, &block)
    super
    @attributes = []
    model_attributes.each do |attribute|
      @attributes << Rails::Generators::GeneratedAttribute.new(*attribute.split(":")) if attribute.include?(":")
    end
  end
end

我以这种方式将其包含在我的生成器中:

class MyViewsGenerator < Rails::Generators::NamedBase
  include Initializer
  initialize()

但是当我调用生成时,它失败并出现此错误:

Error: uninitialized constant MyViewsGenerator::Initializer.

为了能够将关注模块中的方法用作其他 classes 中的实例方法,它应该进入 included 块。

要从关注的 class 方法中创建方法,您可以将它们放入 ClassMethods 模块中。

因为你调用 initialize() 作为 class 方法,你实际上应该在 ClassMethods 模块中输入:

module Initializer
  extend ActiveSupport::Concern

   included do # instance methods goes here
    end

    module ClassMethods # class methods goes here
      # Initialize the generator accepting attributes as arguments
      def initialize(*args, &block)
       # ...
      end
    end

 end

按照惯例,关注的模块放在 models/concerns/ 文件夹中。