我读了一下关于 发电机但找不到任何关于创建视图的信息。通过阅读 Rails 3发电机 gem中,我发现你可以通过将新的模板放在 lib/generators/erb/scaffold/templates/
. 您还可以在 "视图 "中指定您要创建的视图。scaffold_generator.rb
文件,其中有一个像这样的片段。
def available_views
['index', 'edit', 'show', 'new', '_form']
end
所以我的问题是,如果我想同时创建一个... ... index.html.erb
文件和一个 index.js.erb
文件?
很明显,视图的实际创建是由一个叫做 copy_view_files
. 你可以在该函数中指定你想要的视图类型。这样做之后,我的 scaffold_generator.rb
看起来像这样。
需要 "railsgeneratorserbscaffoldscaffold_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视图。
类似于我发的问题的答案 https:/stackoverflow.coma62441675385730。.
您可以覆盖脚手架生成器 lib/rails/generators/erb/scaffold/scaffold_generator.rb
文件。
步骤1:复制最新的 scaffold_generator.rb
文件。
mkdir -p lib/rails/generators/erb/scaffold && cp $(bundle show railties)/lib/rails/generators/erb/scaffold/scaffold_generator.rb lib/rails/generators/erb/scaffold/
第二步:添加自定义代码添加自定义代码来生成 .js.erb
您想要的文件。
# frozen_string_literal: true
require "rails/generators/erb"
require "rails/generators/resource_helpers"
module Erb # :nodoc:
module Generators # :nodoc:
class ScaffoldGenerator < Base # :nodoc:
include Rails::Generators::ResourceHelpers
argument :attributes, type: :array, default: [], banner: "field:type field:type"
def create_root_folder
empty_directory File.join("app/views", controller_file_path)
end
def copy_view_files
available_views.each do |view|
formats.each do |format|
filename = filename_with_extensions(view, format)
template filename, File.join("app/views", controller_file_path, filename)
end
end
javascript_views.each do |view|
path = File.join('app', 'views', controller_file_path, "#{view}.js.erb")
File.open(path, "w")
end
end
private
def available_views
%w(index edit show new _form)
end
def javascript_views
%w(index show create update)
end
end
end
end
现在,当您运行脚手架生成器时,您会看到新的 .js.erb
创建的文件。