1

我正在编写一个 Rails 3.2 生成器,并想使用Thor::Shell::Basic实例方法(例如askyes?),就像他们在官方 Rails 指南中的 Application Templates一样。

module MyNamespace
  class ScaffoldGenerator < Rails::Generators::Base
    source_root File.expand_path('../templates', __FILE__)

    if yes? "Install MyGem?"
      gem 'my_gem'
    end

    run 'bundle install'
  end
end

这会给我一个NoMethodError: undefined method 'yes?' for MyNamespace::ScaffoldGenerator:Class.

我想不出一种干净的方法来使这些实例方法可用 - 我已经从Rails::Generators::Base.

编辑:

啊,这可能与托尔无关……我收到警告:

[WARNING] Could not load generator "generators/my_namespace/scaffold/scaffold_generator"

尽管我使用了生成器来生成生成器,但有些东西没有正确设置......

4

1 回答 1

2

哦,是的,它确实与托尔有关。

不要让自己对警告感到困惑。您知道 Rails::Generators 使用 Thor,因此请前往Thor Wiki并查看Thor 任务的工作原理

rails 生成器执行将调用生成器中的任何方法。所以确保你把你的东西组织成方法:

module MyNamespace
  class ScaffoldGenerator < Rails::Generators::Base
    source_root File.expand_path('../templates', __FILE__)

    def install_my_gem
      if yes? "Install MyGem?"
        gem 'my_gem'
      end
    end

    def bundle
      run 'bundle install'
    end
  end
end

请务必将您的生成器放入正确的文件夹结构中,例如lib/generators/my_namespace/scaffold_generator.rb.

谢谢你的问题,伙计!

于 2012-12-09T20:41:18.687 回答