我想创建一个生成器,为我在Rails 4中工作的系统创建一些自定义脚手架。我有一个基本生成器,用于将该文件从模板复制到目标。
copy_file "controllers/module_controller.rb", "app/controllers/#{file_name}_controller.rb"
这很好但我想知道的是如何在模板中使用#{file_name}?例如,我可以这样做吗?
class <%= "#{file_name}" %>Controller < ApplicationController
答案 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
希望这会对你有所帮助