私はrails generate model MyModel
で作成するすべてのモデルに別のフィールドを追加したいと思っています。デフォルトでは、とcreated_at
とupdated_at
のタイムスタンプが割り当てられます。モデルジェネレータに組み込まれたレールをパッチする方法は?
この発電機を再度開き、フィールドdeleted_at
をデフォルト発電機に追加するにはどうすればよいですか?
私はrails generate model MyModel
で作成するすべてのモデルに別のフィールドを追加したいと思っています。デフォルトでは、とcreated_at
とupdated_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
ニースのアプローチ、共有のためのthx :) – Severin
問題はありませんし、あなたのためにうれしい嬉しい。私は、猿のパッチについて気持ちが混ざっている多くの人を知っていますが、それは仕事を終わらせます。 :)ああ、あなたは2,999にいます。私はあなたが3Kを超える投票になりたいと思っていますが、私はすでに質問をupvoted :) –
Welcome @NickM Severin;) –
おそらくオリジナルのものを呼び出し、その後、独自のフィールドを追加し、私はそれが可能だかどうかわからないんだけど、あなたがあなた自身のジェネレータを作成することができます。 –