【问题标题】:Pass file_name to Rails generator template将 file_name 传递给 Rails 生成器模板
【发布时间】:2014-06-26 12:28:33
【问题描述】:

我想创建一个生成器来为我在 Rails 4 中工作的系统创建一些自定义脚手架。我有一个基本的生成器,其中包含将文件从模板复制到目标的行。

 copy_file "controllers/module_controller.rb", "app/controllers/#{file_name}_controller.rb"

这很好,但我想知道如何在模板中使用#{file_name}?例如,我可以这样做吗?

 class <%= "#{file_name}" %>Controller < ApplicationController

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 generator


    【解决方案1】:

    虽然我做的有点不同。我们需要使用template 方法而不是copy_file

    class SomethingGenerator < Rails::Generators::NamedBase
      source_root File.expand_path('../templates', __FILE__)
      def copy_files
        # Controller
        template "controllers/something_controller.erb", "app/controllers/#{something_name}_controller.rb"
      end
    
      private
      def something_name
        file_name.underscore
      end
    end
    

    这也适用于视图和其他文件。关键是使用 Dileep Nandanam 指出的 .erb 文件。

    【讨论】:

      【解决方案2】:

      我猜你使用 erb 来定制脚手架。 创建 generic_controller.erb

      class <%= controller_name %>Controller < ApplicationController
          some stuff using erb
      end
      

      然后你可以像这样评估它

      controller_name = 'Something'
      ERB.new(File.read('generic_controller.erb')).run(binding())
      

      这会给你

      class SomethingController < ApplicationController
          some stuff using erb
      end
      

      希望对你有帮助

      【讨论】:

      • 使用 erb 文件是可行的方法。
      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2012-09-17
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多