钩入Rails模型生成器

Kyl*_*cot 2 ruby ruby-on-rails ruby-on-rails-4

我正在尝试在rails 4应用程序中创建一个客户生成器.我跑了

rails g generator bootstrap
Run Code Online (Sandbox Code Playgroud)

这创建了一些文件lib/generators/bootstrap.包含bootstrap_generator.rb

class BootstrapGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)
end
Run Code Online (Sandbox Code Playgroud)

我希望这个发生器在我运行时挂钩rake g model ....我该如何实现呢?

Cod*_*ver 7

无论如何,我认为这不是干净但工作的解决方案:

配置/ application.rb中

module YourApp
  class Application < Rails::Application
    config.generators do |g|
      g.orm             :concerns # to get run our generator under ActiveRecord
      g.test_framework  :rspec
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

LIB /发电机/导轨/关注/ concerns_generator.rb

require 'rails/generators/active_record/model/model_generator'

module Rails
  module Generators

    hide_namespace 'concerns'

    class ConcernsGenerator < ActiveRecord::Generators::ModelGenerator
      source_root "#{base_root}/active_record/model/templates"

      def create_concern_file
        create_file "app/models/concerns/#{file_name}_concern.rb", <<-FILE
      class #{class_name}Concern

      end
        FILE
      end

      def create_concern_spec
        create_file "spec/models/#{file_name}_concern_spec.rb", <<-FILE
      require 'spec_helper'

      describe #{class_name}Concern
        pending "add some examples to (or delete) #{__FILE__}"
      end
        FILE
      end

    end
  end
end
Run Code Online (Sandbox Code Playgroud)

给我们的是:

$ rails g model Product name:string description:text
      invoke  concerns
      create    db/migrate/20131005122831_create_products.rb
      create    app/models/product.rb
      invoke    rspec
      create      spec/models/product_spec.rb
      create    app/models/concerns/product_concern.rb
      create    spec/models/product_concern_spec.rb
Run Code Online (Sandbox Code Playgroud)