将 file_name 传递给 Rails 生成器模板

Hun*_*ick 4 ruby-on-rails generator ruby-on-rails-4

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

 copy_file "controllers/module_controller.rb", "app/controllers/#{file_name}_controller.rb"
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想知道如何在模板中使用 #{file_name} ?例如,我可以做这样的事情吗?

 class <%= "#{file_name}" %>Controller < ApplicationController
Run Code Online (Sandbox Code Playgroud)

Hun*_*ick 6

虽然我做的有点不同。我们将需要使用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
Run Code Online (Sandbox Code Playgroud)

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