LoginSignup
1
0

More than 3 years have passed since last update.

【Ruby】カラムの名前間違えた&制約間違えた〜助けてmigrate〜

Last updated at Posted at 2021-01-08

解決したいこと

アプリケーションを作り始めて2日目。
DB設計を終えてテーブルを作り、モデルを作り、ふと気付く。

「あれ?スペル違ってるじゃないの・・・」
「あれ?null制約かかっててコンソールからデータ追加できないじゃないの・・・」

さてこれはどうしたものかと色々調べた結果、名前だけ変えられる素晴らしいコマンドがあるとのこと。
ありがたやありがたや・・・。

該当するソースコード


class CreateParties < ActiveRecord::Migration[6.0]
  def change
    create_table :parties do |t|
      t.string  :name,          null: false
      t.text    :iintroduction, null: false    #⬅️①なぜかiが多いスペルミス
      t.integer :season_id,     null: false
      t.integer :country_id,    null: false
      t.integer :genre_id,      null: false
      t.text    :picture,       null: false    #⬅️②これも修正したい
      t.timestamps
    end
  end
end

まずは①からターミナルで実行。

% rails generate migration rename_iintroduction_column_to_parties
                                 ⬆️変えたいカラム名          ⬆️モデル名

結果がこちら。
新しくrename用のマイグレーションファイルを作ってくれます。

Running via Spring preloader in process 9848
      invoke  active_record
      create    db/migrate/20210108122152_rename_iintroduction_column_to_parties.rb

次に作成してくれたファイルに記述していきます。

class RenameIintroductionColumnToParties < ActiveRecord::Migration[6.0]

  def change
    rename_column :parties, :iintroduction, :introduction
  end             ⬆️モデル名  ⬆️変えたいカラム名  ⬆️修正後のカラム名
end

記述できたらマイグレーション。

% rails db:migrate

直った!
次は②のnull:false制約をつけてしまったものを外したいという作業。
なぜかというとレビューサイトを作っているのですが、レビューしたいデータは管理者のみが作成できるようにしたいため、ひとまずデータの投稿をコンソールから行いたかったからです。
そこで画像データをコンソールから入力しようとしたところnull:false制約がついているためコンソールからデータ入力ができずに困っておりました。
一度この制約を外してとにかく画面上に一つでもデータが表示されるようにしたいというのもあったため、取り急ぎ外すことに。
こちらも同じようなコマンドで対応可能でした。

 % bin/rails g migration ChangeColumnToAllowNull

同じくマイグレーションファイルが作成されるのでそちらに記述。


class ChangeColumnToAllowNull < ActiveRecord::Migration[6.0]

  def up
    change_column_null :parties, :picture, null: true   #「up」でnull: trueに変更しますよ、という意味
  end

  def down
    change_column_null :parties, :picture, null: false  #「down」でnull: false制約つきのものから⬆️⬆️⬆️
  end

end

記述できたらマイグレーション。

% rails db:migrate

これで制約を外すことができたのでデータを追加することができました。
そして今、わたしの目の前にはいざ画像を追加しようと思ったら容量が大きすぎて追加できないというエラーが発生しております。
さあ次の戦場へ向かおう。

参考にさせて頂いた記事

https://qiita.com/libertyu/items/93acd8733e34b1d0a63c
https://qiita.com/mom0tomo/items/31466a80ca38db4ebf8c

ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0