ゆみんぐ ~Yumi+Programming~

弓道とプログラミングを楽しむブログ

Railsでモデル名を変更する時にやったこと

フィヨルドブートキャンプの「Railsでユーザーフォローを作る」というプラクティスで実行した手順メモです。

ユーザーを自己結合するための中間テーブルを設けており、モデル名をrelatonship.rbにしていました。そこから別の名前(仮にfollow_relationship.rbとする)に変更することになりましたが、モデル名の変更はそれだけで済む問題ではなく、データベース、モデル、コントローラー、ルーティング、ビューまで、関連しているものを全て修正する必要があります。

概要

  1. マイグレーションファイルを作成、編集
  2. モデル名を変更、内容修正
  3. コントローラー名を変更、内容修正
  4. ルーティングを修正
  5. ビューを修正

環境

参考記事

手順

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のコマンドを使う必要があるので注意が必要です。

(変更履歴を残さずにファイルを削除して新たに追加する方法もあると思いますが、今回はこの方法にしました。)