Rails:既存のテーブルに対しての項目追加とattributeについて
Railsで、TODOを管理するアプリを開発中の際に、
既存のテーブル(Todoテーブル)に対して、項目を追加する際の手順について解説します。
項目を追加する際に「attribute」の考え方やモデルとテーブルに対する認識が誤っていたため、
うまく項目を追加できずにエラー解決のために時間を要したため情報を共有します。
まず、attributeメソッドとは
例えば、todoテーブル、todoモデルを作成済みだと仮定してTodoモデルに「attribute :test, :string」を追記します。
class Todo < ApplicationRecord
attribute :test, :string
end
すると、コンソール画面でTodoモデルがtest項目を所持しているように見えるのですが、test項目に対してデータを保存することはできません。
これはあくまで、Todoモデルにtestというメソッドがあるだけで、
Todoテーブルにはtestという項目は作成されていないため.saveメソッドを実行しても
Todoモデルのtestメソッドの内容がTodoテーブルに保存されることはないです。
認識が間違っていた部分
Railsにおけるmodelとmigrateファイルについての理解が甘かったです。
modelはあくまでDBにあるテーブルを扱いやすくしたclassであり、model=tableではないということを学びました。
Railsでテーブルに項目追加や、indexを付与する際は、
SQLを直接実行するか、migrateファイルを作成して、「rails db:migrate」しないとテーブルに対する変更はできないと学習できました。
補足:migrateファイルを作成してテーブルに項目追加する方法
項目追加するためには、以下のコードを実行する
rails generate migration AddTitleToTodo title:string
すると、新たにmigrateファイルが作成され、以下の内容のmigrateファイルが作成される
class AddTitleToTodo < ActiveRecord::Migration[7.1]
def change
add_column :todos, :title, :string
end
end
その後に、
コンソールで「rails db:migrate」を実行し先ほど作成したmigrateファイルを実行する
以上の操作でテーブルに対しての項目追加が完了しているはずです。