将file_name传递给Rails生成器模板

时间:2014-05-08 21:51:07

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

虽然我做的有点不同。我们需要使用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文件。

答案 1 :(得分:0)

我猜你使用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

希望这会对你有所帮助