解決したいこと
アプリケーションを作り始めて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
ありがとうございました。