Railsでモデル名を変更する時にやったこと
フィヨルドブートキャンプの「Railsでユーザーフォローを作る」というプラクティスで実行した手順メモです。
ユーザーを自己結合するための中間テーブルを設けており、モデル名をrelatonship.rb
にしていました。そこから別の名前(仮にfollow_relationship.rb
とする)に変更することになりましたが、モデル名の変更はそれだけで済む問題ではなく、データベース、モデル、コントローラー、ルーティング、ビューまで、関連しているものを全て修正する必要があります。
概要
- マイグレーションファイルを作成、編集
- モデル名を変更、内容修正
- コントローラー名を変更、内容修正
- ルーティングを修正
- ビューを修正
環境
参考記事
- 【参考】【Ruby on Rails】テーブル名の変更方法と変更時にやること一覧&ステップ - Qiita
- 【参考】マイグレーション(migration) | Railsドキュメント
- 【参考】Gitでのファイル名変更 - Qiita
手順
1.マイグレーションファイルを作成します。テーブル名はrelationships
からfollow_relationships
に変更するので、change_relationships_to_follow_relationships
となります。
$ rails g migration change_relationships_to_follow_relationships
マイグレーションファイルを編集し、テーブル名を変更します。今回はインデックスも付けていたのでrename_index
を使用します。
インデックス名はschema.rb
を見ると書いてあります。
class ChangeRelationshipsToFollowRelationships < ActiveRecord::Migration[6.1] def change rename_table :relationships, :follow_relationships rename_index :follow_relationships, 'index_relationships_on_follower_id', 'index_follow_relationships_on_follower_id' rename_index :follow_relationships, 'index_relationships_on_following_id_and_follower_id', 'index_follow_relationships_on_following_id_and_follower_id' rename_index :follow_relationships, 'index_relationships_on_following_id', 'index_follow_relationships_on_following_id' end end
2.モデル名を変更します。
今回のプラクティスはgitを使用しているので、ただファイル名を変更するだけでは変更履歴が追えなくなってしまいます。
そのため、gitで反映されるようにgit mv
を使用してファイル名を変更します。
$ git mv relationship.rb follow_relationship.rb
次にモデルの内容をclass Relationship
からclass FollowRelationship
へ修正します。
class FollowRelationship < ApplicationRecord
関連しているモデルuser.rb
の内容も同様に修正します。
〜〜〜 has_many :active_relationships, class_name: 'FollowRelationship', 〜〜 〜〜〜 has_many :passive_relationships, class_name: 'FollowRelationship', 〜〜 〜〜〜
3.コントローラー名を変更します。これも同様にgit mv
を使用して変更します。
$ git mv relationships_controller.rb follow_relationships_controller.rb
コントローラーの内容をclass RelationshipsController
からclass FollowRelationshipsController
へ修正します。
class FollowRelationshipsController < ApplicationController
4.rails db:migrate
を実行した後、ルーティングを修正します。
routes.rb
の:relationships
だった部分を:follow_relationships
に修正します。
resource :follow_relationships, only: %i(create destroy)
5.最後にビューファイルを修正します。 今回はユーザーの詳細画面に名前付きルーティングヘルパーを使用していたので、ルーティングを確認し該当部分を修正します。 該当部分はフォロー・フォロー解除のボタンの部分。
<% if current_user != @user %> <% if @user.followed_by?(current_user) %> <p><%= link_to t('views.follow.cancelled'), user_follow_relationships_path(@user.id), method: :delete %></p> <% else %> <p><%= link_to t('views.follow.followed'), user_follow_relationships_path(@user.id), method: :post %></p> <% end %> <% end %>
まとめ
モデル名の変更するにはデータベース、モデル、コントローラー、ルーティング、ビューなど、関連しているものを全て修正する必要がありました。
また、gitを使っていることもあってファイル名の変更にはgitのコマンドを使う必要があるので注意が必要です。
(変更履歴を残さずにファイルを削除して新たに追加する方法もあると思いますが、今回はこの方法にしました。)