我需要为现有的咖啡脚本附加为给定class_name
生成的一些行。我正在使用ERB
来模拟文件(assets / javascripts / routes.js.coffee.erb),然后附加到我的文件中;但我找不到将参数传递给模板的解决方案。所以我仍然遇到class_name
未初始化的错误。有什么想法吗?
我的生成器中有这些行
# my controller
if File.readlines(tmp_file).grep(/#{class_name.tableize}/).size <= 0 then
open(tmp_file, 'a') { |f|
f.puts ERB.new(File.read("#{files_origin}/assets/javascripts/routes.js.coffee.erb")).result
}
我的模板文件:
# assets/javascripts/routes.js.coffee.erb
# <%= class_name.tableize %>
$stateProvider.state('<%= class_name.tableize %>', {
# state for showing all <%= class_name.tableize %>
url: '/<%= class_name.tableize %>',
templateUrl: '<%= class_name.tableize %>/index.html',
controller: '<%= class_name.camelize(:upper) %>ListCtrl'
}).state('view<%= class_name.camelize(:upper) %>', {
#state for showing single <%= class_name.camelize(:upper) %>
url: '/<%= class_name.tableize %>/:id/view',
templateUrl: '<%= class_name.tableize %>/show.html',
controller: '<%= class_name.camelize(:upper) %>ViewCtrl'
})
答案 0 :(得分:0)
好的,我已经找到了:p
唯一的事情是添加binding选项以允许ERB使用我现有的class_name
变量。
# my controller
if File.readlines(tmp_file).grep(/#{class_name.tableize}/).size <= 0 then
open(tmp_file, 'a') { |f|
f.puts ERB.new(File.read("#{files_origin}/assets/javascripts/routes.js.coffee.erb")).result(binding)
}
现在将解释后的代码附加到我的文件中。例如,当我调用我的生成器创建livres
时,它会附加:
# app/assets/javascripts/routes.js.coffee
# livres
$stateProvider.state('livres', {
# state for showing all livres
url: '/livres',
templateUrl: 'livres/index.html',
controller: 'LivreListCtrl'
}).state('viewLivre', {
#state for showing single Livre
url: '/livres/:id/view',
templateUrl: 'livres/show.html',
controller: 'LivreViewCtrl'
})