##前提条件
OS:Mac OS X
Rails:5.2.3
groupモデルをroomモデルに変更します。
##モデル名の変更方法
最初に結論から。
そのあとそれぞれのコマンドの解説をしています。
※置換で一気に変更する際は、migrationファイルなど変更したくないファイルには気をつけてください。
####1. 変更するモデルに対応するDBのテーブル名を変更
def change
# :groupsが変更前
rename_table :groups, :rooms
end
変更内容をDBに反映
$ rails db:migrate
####2.モデルに関連するファイル名を全て変更
# find 対象ディレクトリ | xargs rename -s 変更前のファイル名 変更後のファイル名
$ find ./ | xargs rename -s group room
$ find ./ | xargs rename -s Group Room
■ 実行結果の例 ■
groups_controller.rb
↓
rooms_controller.rb
####3.モデルが使用されてるファイルの中身を全て変更
# find 対象ディレクトリ -name "検索する文字列" | LC_ALL=C xargs sed -i -e "s/変換前/変換後/g"
$ find ./ -name "*room*" | LC_ALL=C xargs sed -i -e "s/group/room/g"
$ find ./ -name "*room*" | LC_ALL=C xargs sed -i -e "s/Group/Room/g"
■ 実行結果の例 ■
class Admin::GroupsController < ApplicationController
↓
class Admin::RoomsController < ApplicationController
####4.バックアップとしてできたファイルを削除
なぜかファイル名の末尾に-eとつくバックアップのファイルが生成されたため削除する。
# find 対象ディレクトリ -name "検索する文字列" | xargs rm
$ find ./ -name "*.*-e" | xargs rm
■ 実行結果 ■
下記のようなファイル名の末尾に-eとつくファイルが削除された。
groups_controller.rb-e
##使用したコマンドの解説
####findコマンド
ファイルやディレクトリを検索できる。
オプション | コマンドの説明 |
---|---|
-name | ファイル名を指定して検索できる |
####xargsコマンド
前に実行したコマンドの結果を引き継げる。
# find 対象ディレクトリ | xargs rename -s 変更前のファイル名 変更後のファイル名
$ find ./ | xargs rename -s group room
上記の例だと、「find ./」で自分がいる階層のファイルとディレクトリを検索している。
xargsを使ってその検索結果を引き継ぎ、引き継いだ検索結果の中からファイル名がgroupの
ものをroomに変更している。
####sedコマンド
ファイルの中身のテキストを置換できる。
オプション | コマンドの説明 |
---|---|
-i | ファイルを上書きする |
s | 正規表現で置換処理をする |
g | マッチした全ての文字列を置換する |
-eコマンドはちょっとよくわかんない。 | |
ご存知の方、ご教授いただけると助かります。 |
####LC_ALL=C
出力する言語や時刻などのフォーマットを設定する。
LC_ALL=Cはデフォルトの言語(英語)で出力される。
デフォルトの言語を日本語にしているせいかこれつけないとillegal byte sequence
っていうエラーがでるからつけてます。
##終わりに
モデル名の変更に時間がかかったので自分用のメモとしてこの記事を書きました。
皆様のモデル名の変更するときの参考になれば幸いです。
なぜバックアップのファイルが出力されたのか謎。