覆盖 rails 生成器以将 date_select 更改为 date_field

Override rails generator to change date_select into date_field

我一直在尝试覆盖 rails 生成器(当您 运行 rails generate scaffold 时)以生成日期类型 date_field 而不是 date_select 形式(时间和日期时间相同)。映射位于 railties/lib/rails/generators/generated_attribute.rb

def field_type @field_type ||= case type when :integer then :number_field when :float, :decimal then :text_field when :time then :time_select when :datetime, :timestamp then :datetime_select when :date then :date_select when :text then :text_area when :boolean then :check_box else :text_field end end

我不知道将更新后的 generated_attribute.rb 文件放在哪里。我在 rails 应用程序 lib/generators/generated_attribute.rblib/templates/generators/generated_attribute.rb 中尝试过,但没有效果。我还没有找到关于覆盖此文件以更改行为的任何其他信息。

提前致谢。使用 rails 5.2

好像还没有自动覆盖这个文件。 我把我的放在 lib/rails/generators/generated_attribute.rb 然后你可以在覆盖的 lib/rails/generators/erb/scaffold/scaffold_generator.rb:

之上添加 require "#{Rails.root}/lib/rails/generators/generated_attribute.rb"
require "#{Rails.root}/lib/rails/generators/generated_attribute.rb"
require "rails/generators/erb"
require "rails/generators/resource_helpers"

module Erb # :nodoc:
  module Generators # :nodoc:
    class ScaffoldGenerator < Base # :nodoc:

有点脏,但希望对您有所帮助。