gpt4 book ai didi

ruby-on-rails - 如何修补模型生成器中内置的 rails ?

转载 作者:行者123 更新时间:2023-12-04 06:22:16 28 4
gpt4 key购买 nike

我现在的情况是,我想向使用 rails generate model MyModel 创建的每个模型添加另一个字段。默认情况下,它将被分配一个 ID 以及 created_atupdated_at 的时间戳。

如何重新打开此生成器并将字段 deleted_at 添加到默认生成器?

最佳答案

您可以创建生成器文件的本地版本,该文件是在运行生成器命令后创建的。原文仅供引用:https://github.com/rails/rails/blob/master/activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration.rb

你需要这样的东西:

class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
def change
create_table :<%= table_name %><%= primary_key_type %> do |t|
<% attributes.each do |attribute| -%>
<% if attribute.password_digest? -%>
t.string :password_digest<%= attribute.inject_options %>
<% elsif attribute.token? -%>
t.string :<%= attribute.name %><%= attribute.inject_options %>
<% else -%>
t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
<% end -%>
t.datetime :deleted_at # <------- ADD THIS LINE
<% end -%>
<% if options[:timestamps] %>
t.timestamps
<% end -%>
end
<% attributes.select(&:token?).each do |attribute| -%>
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>, unique: true
<% end -%>
<% attributes_with_index.each do |attribute| -%>
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
<% end -%>
end
end

然后修补生成器类并将其指向保存该文件的位置^

module ActiveRecord
module Generators # :nodoc:
class ModelGenerator < Base # :nodoc:

def create_migration_file
return unless options[:migration] && options[:parent].nil?
attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false
migration_template "#{ PATH_TO_YOUR_FILE.rb }", "db/migrate/create_#{table_name}.rb"
end

end
end
end

可能需要稍微调整一下,但应该可以解决问题。您也可以在运行生成器时只传递该字段:

rails g model YourModel deleted_at:datetime

关于ruby-on-rails - 如何修补模型生成器中内置的 rails ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40304627/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com