0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails modelに項目追加でエラーにあったので、情報を共有します

Last updated at Posted at 2025-02-10

Rails:既存のテーブルに対しての項目追加とattributeについて

Railsで、TODOを管理するアプリを開発中の際に、
既存のテーブル(Todoテーブル)に対して、項目を追加する際の手順について解説します。

項目を追加する際に「attribute」の考え方やモデルとテーブルに対する認識が誤っていたため、
うまく項目を追加できずにエラー解決のために時間を要したため情報を共有します。

まず、attributeメソッドとは

例えば、todoテーブル、todoモデルを作成済みだと仮定してTodoモデルに「attribute :test, :string」を追記します。

todo.rb
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ファイルが作成される

20240414104912_add_title_to_todo.rb
class AddTitleToTodo < ActiveRecord::Migration[7.1]
  def change
    add_column :todos, :title, :string
  end
end

その後に、
コンソールで「rails db:migrate」を実行し先ほど作成したmigrateファイルを実行する

以上の操作でテーブルに対しての項目追加が完了しているはずです。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?