回答:
これが私がすることです:
テーブル名(データベースレベル)を変更する移行を作成します。あなたの古いテーブルは軍団と呼ばれていると思います。移行内容は次のとおりです。
class RenameCorpsToStores < ActiveRecord::Migration
def change
rename_table :corps, :stores
end
end
モデルファイル名、モデルクラス定義、モデルの関連付けを変更します。
corp.rb
->store.rb
store.rb
変更:class Corp
についてclass Store
has_many :corps
->has_many :stores
コントローラファイル名とコントローラクラス定義を変更します。
corps_controller.rb
->stores_controller.rb
stores_controller.rb
変更:class CorpsController
についてclass StoresController
ビューフォルダの名前を変更します。からcorps
までstores
。
->のconfig/routes.rb
ように、ファイル内のパスに必要な変更を加え、コード内のすべての参照がcorpsからstore(corps_path、...)に変更されていることを確認します。resources :corps
resources :stores
移行を実行することを忘れないでください:)
以前の方法が不可能な場合は、db / schema.rbを削除して実行します。
$ rake db:drop db:create db:migrate
find -name "oldname_on_singular?*
名前を変更するファイルのリストを取得するために実行します。次に、calcにコピーし、2番目と3番目の列に2回貼り付けます。最初の列に私はrenameコマンドを追加して、新しい名前の最後の列Iの変更に、のようなもの:git mv ./spec/views/oldname ./spec/views/new name
のび太の回答に加えて、同様にテストとヘルパーのクラス定義とファイル名をcorps
に変更する必要がありますstore
。 さらに重要なこととして、config / routes.rbファイルを次のcorps
ようstore
に変更する必要があります。
つまり、コントローラ、関連するモデル、ビュー、ヘルパー、テスト、およびルートファイルに変更を加えます。
あなたが見たものはdestroy
&generate
で提案された方が良いオプションだと思います。ここでこれを行う方法を答えました:Rails:コントローラーと対応するモデルの名前を変更する
Rails Refactor gemも試すことができます。これは、Railsプロジェクトのモデルやコントローラーの名前変更などの単純なリファクタリング用のコマンドラインツールです。
使用法:
Railsプロジェクトの基本的な名前変更とリファクタリング。これらは完璧ではありませんが、多くの作業を行って時間を節約します。
使用する前に、変更を簡単に確認できるように、リポジトリをクリーンな状態から開始することをお勧めします。
インストールするには:
gem install rails_refactor
使用する前に、railsプロジェクトのルートにcdしてください。
コントローラの名前を変更するには:
rails_refactor rename OldController NewController
- ファイル内のコントローラーファイルとクラス名を変更します
- ファイル内のコントローラスペックファイルとクラス名を変更します
- ビューディレクトリの名前を変更します
- ファイル内のヘルパーファイルとモジュール名を変更します
- ルートを更新する
コントローラアクションの名前を変更するには:
$ rails_refactor rename DummyController.old_action new_action
- コントローラクラスファイルのコントローラアクションの名前を変更します
- すべてのフォーマットのビューファイルの名前を変更します
モデルの名前を変更するには:
$ rails_refactor rename OldModel NewModel
- ファイル内のモデルファイルとクラス名を変更します
- ファイル内のスペックファイルとクラス名の名前を変更します
- ファイル内のマイグレーションとクラス名とテーブル名を変更します
...
Nobitaの回答(十分な担当者がいたらコメントします)に加えて、勇気がある場合は、ファイル名の変更とコード内のモデルへの参照をある程度自動化できます。たとえば、コード内の参照を変更するには、次を使用できます
単数、マイナス、メイス:
grep -rl corp | xargs sed -i 's/corp/store/g'
grep -rl Corp | xargs sed -i 's/Corp/Store/g'
複数形、マイナス形、およびメイユ形(複数形だけが必要で、最後にs文字がある場合は、複数形を単数形に置き換えます):
grep -rl corps | xargs sed -i 's/corps/stores/g'
grep -rl Corps | xargs sed -i 's/Corps/Stores/g'
ファイル名を変更:
find . -name '*corp*' -exec bash -c 'mv $0 ${0/corp/store}' {} \;
一部の* nixフレーバー(Slackwareを含む)には、ファイル名の変更に役立つrenameというユーティリティがあります。
shopt -s globstar
rename -v corps stores app/**/*corps* config/**/*corps* test/**/*corps*
名前の変更はあなたが思っているとおりですが、同じ名前の別のユーティリティが同梱されているUbuntuのような他のディストリビューションも知っています(/unix/78621/find-rename-command-を参照)。動作しません)。Ubuntuでは代わりにこれを行います:
shopt -s globstar
rename -v 's/corps/stores/' app/**/*corps* config/**/*corps* test/**/*corps*
おそらくseeds.rbファイルを除いて、db /のファイルの名前を変更したくないので、このディレクトリを除外して手動で変更を加えたいことに注意してください。
もう1つの重要なことは、モデルの関連付けを更新する必要があることです。手動で名前を変更するか、リソースを破棄して生成するか(他のモデルに存在するため)を行う必要があります。マイグレーションを実行して、データベース内の外部キーの列名を変更し、コード内のそれらの外部キーへのすべての参照を変更することができます。
rename_column :table, :old_id, :new_id
または、古い外部キーを使用する関連付けを宣言するときに、カスタム外部キーを設定します。
belongs_to :new, foreign_key: "old_id"
また、リソースに画像が含まれている場合、それらは多くの場合、リソース名を含むディレクトリに保存されますが、(少なくともcarrierwaveを使用して)リソース名が変更されると、それらは誤って参照されます(ファイルは '/ uploads / old / image /に存在します1 / pic.jpg」ですが、「uploads / new / ...」で検索されるため、画像を削除して再アップロードするか、新しいパスに移動するか、画像の場所を変更する必要があります。探しています。
モデルテストがある場合は、変更する必要があります。
ファイル名の変更:corp_test.rb-> store_test.rb(コントローラーテスト、統合テスト、フィクスチャなども対象)
store_test.rbのコード:StoreTestクラスのCorpTestクラスを変更します。
そして、コントローラ、モデル、統合、フィクスチャテストにおけるcorpのすべての参照。
この苦痛なプロセスを終えたばかりの人として、最も重要なステップは、できるだけ多くの機能をチェックするために十分なテストを構築することです。名前を変更する予定のモデル/コントローラーだけでなく、他のすべてのモデル/コントローラー/ビューのパーツもカバーする必要があります。とにかく、それは良い(あるいはおそらく必須の)練習です。
この手順を繰り返し実行します。変更が必要な追加のファイルを見つけるために、いくつかの手順(5回以上)に戻る必要がある場合があります。そして今、名前の変更手順について:
Corps/Corp
にStores/Store
でdb/migrate
フォルダを実行してみてください:
レーキdb:drop:all
rake db:create
rake db:migrate
db/seeds.rb
ファイルの内容を変更します。
rake db:seed --trace
(このステップでは、他のモデル/コントローラーファイルを変更する必要がある場合があります)。test/fixtures
ファイルを変更します。corps.ymlだけでなく、その他の関連ファイルを変更する必要がある場合があります(一部のファイルにはcorp_idが含まれている場合があります)。TESTOPTS="--seed=1981"
またはその他の番号)