rails 3 - 生成与每个动作视图相关的js.erb文件。

问题描述 投票:0回答:1

有没有一种(简单的)方法来配置默认生成器,使其除了为html.erb文件生成一个js.erb文件外,还能为每个动作生成一个js.erb文件?

ruby-on-rails ruby-on-rails-3.1 generator erb
1个回答
0
投票

你可以覆盖脚手架生成器 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 创建的文件。

© www.soinside.com 2019 - 2024. All rights reserved.