2013-05-01 55 views
0

我已阅读关于generators的文档,但找不到有关创建视图的任何信息。通过阅读Rails 3 Generators宝石中的代码,我发现可以通过在lib/generators/erb/scaffold/templates/中放置新代码来覆盖默认模板。您还可以指定要在scaffold_generator.rb文件创建哪些视图与像一个片段:Rails:使用脚手架生成HTML和JS视图

def available_views 
    ['index', 'edit', 'show', 'new', '_form'] 
end 

所以我的问题是,如果我想同时创建index.html.erb文件和文件index.js.erb什么?

回答

0

显然,视图的实际创建是通过名为copy_view_files的函数完成的。你可以在该函数中指定你想要的视图类型。这样做之后,我scaffold_generator.rb看起来是这样的:

要求 '导轨/发电机/ ERB /支架/ scaffold_generator'

module Erb 
    module Generators 
    class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator 
     source_root File.expand_path(File.join('..', 'templates'), __FILE__) 

     def copy_view_files 
     primary_views.each do |view| 
      filename = filename_with_extensions view 
      template "#{view}.html.erb", File.join('app', 'views', controller_file_path, filename) 
      template "#{view}.js.erb", File.join('app', 'views', controller_file_path, filename) 
     end 
     end 

     hook_for :form_builder, :as => :scaffold 

     protected 
     def primary_views 
      ['index', 'edit', 'show', 'new'] 
     end 

     def handler 
      :erb 
     end 
    end 
    end 
end 

注意,copy_view_files函数中,有两次调用template。第一个创建一组html视图,第二个创建我想要的js视图。

+0

很酷的想法。你把你的覆写放在'scaffold_generator.rb'的哪里?我可以通过将它放置在'config/initializers/scaffold_generator.rb'中来定制默认生成器,但是然后'rails s'抛出了一个异常,但是当我尝试将它放入'lib/generators/ERB /支架/ scaffold_generator.rb'。 – Anson 2014-01-16 16:26:27

+0

我在'/ lib/generators/slim/scaffold/scaffold_generator.rb'中使用了'slim'替代'erb'。不知道为什么这不适合你。 – nullnullnull 2014-01-16 18:35:18

相关问题