3

私はrails generate model MyModelで作成するすべてのモデルに別のフィールドを追加したいと思っています。デフォルトでは、とcreated_atupdated_atのタイムスタンプが割り当てられます。モデルジェネレータに組み込まれたレールをパッチする方法は?

この発電機を再度開き、フィールドdeleted_atをデフォルト発電機に追加するにはどうすればよいですか?

+0

おそらくオリジナルのものを呼び出し、その後、独自のフィールドを追加し、私はそれが可能だかどうかわからないんだけど、あなたがあなた自身のジェネレータを作成することができます。 –

答えて

2

ジェネレータコマンドの実行後に作成されるジェネレータファイルのローカルバージョンを作成できます。ここでは、元は参考値です: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

+0

ニースのアプローチ、共有のためのthx :) – Severin

+0

問題はありませんし、あなたのためにうれしい嬉しい。私は、猿のパッチについて気持ちが混ざっている多くの人を知っていますが、それは仕事を終わらせます。 :)ああ、あなたは2,999にいます。私はあなたが3Kを超える投票になりたいと思っていますが、私はすでに質問をupvoted :) –

+0

Welcome @NickM Severin;) –

関連する問題