Railsのモデルは、データベースのテーブルとそのテーブルに対応するオブジェクトを管理する役割を持ちます。この記事では、Railsアプリケーションにおける「記事」と「コメント」のモデルに関する基本的な操作である、記事の作成・更新・削除とコメントの追加・削除を取り上げていきます。
1. モデルの設計
1.1 記事モデルの作成
まず、記事を管理するためのモデルを作成します。以下のコマンドで「Article」モデルを生成します。

bashrails generate model Article title:string content:text
このコマンドにより、記事のタイトル (title
) と本文 (content
) を格納するカラムを持つarticles
テーブルが作成されます。
次に、マイグレーションを実行して、データベースを更新します。
bashrails db:migrate
1.2 コメントモデルの作成
次に、コメントを管理するためのモデルを作成します。コメントは記事に関連づける必要があるため、article_id
カラムを持たせることになります。
bashrails generate model Comment content:text article:references
これにより、コメントモデルにcontent
カラムと、記事モデルとの関連を示すarticle_id
カラムが追加されます。同様にマイグレーションを実行して、データベースを更新します。
bashrails db:migrate
2. モデル間の関連付け
2.1 記事とコメントの関連付け
Article
モデルとComment
モデルの間には「一対多」の関係があると考えられます。すなわち、1つの記事に複数のコメントが付けられるという関係です。この関係をモデルで定義します。
article.rb
(記事モデル)に次のように記述します。
rubyclass Article < ApplicationRecord
has_many :comments, dependent: :destroy
end
comment.rb
(コメントモデル)には、次のように記述します。
rubyclass Comment < ApplicationRecord
belongs_to :article
end
このように設定することで、記事に関連付けられたコメントを取得できるようになり、また記事が削除されると、それに関連するコメントも自動的に削除されます。
3. 記事の作成・更新・削除
3.1 記事の作成
新しい記事を作成するためには、次のようにArticle
モデルをインスタンス化し、保存します。
rubyarticle = Article.new(title: '新しい記事', content: 'これは新しい記事です。')
article.save
または、次のようにcreate
メソッドを使用して、インスタンス化と保存を同時に行うこともできます。
rubyarticle = Article.create(title: '新しい記事', content: 'これは新しい記事です。')
3.2 記事の更新
既存の記事を更新する場合は、find
メソッドで記事を取得し、その属性を変更します。
rubyarticle = Article.find(1) # IDが1の記事を取得
article.update(title: '更新された記事', content: '記事の内容が更新されました。')
3.3 記事の削除
記事を削除する場合は、destroy
メソッドを使用します。
rubyarticle = Article.find(1) # IDが1の記事を取得
article.destroy
記事が削除されると、関連するコメントも自動的に削除されることになります(dependent: :destroy
による設定のおかげです)。
4. コメントの追加・削除
4.1 コメントの追加
コメントを追加するためには、記事に関連するコメントを作成します。例えば、記事IDが1の記事に新しいコメントを追加する場合、次のように記述します。
rubyarticle = Article.find(1)
comment = article.comments.create(content: 'この記事はとても興味深いです。')
これにより、記事に紐づいたコメントが作成されます。
4.2 コメントの削除
コメントを削除する場合も、destroy
メソッドを使います。
rubycomment = Comment.find(1) # IDが1のコメントを取得
comment.destroy
この操作により、指定したコメントがデータベースから削除されます。
5. バリデーションの追加
記事やコメントにバリデーションを追加することで、不正なデータの入力を防ぐことができます。例えば、記事のタイトルと内容が空でないことを確認するバリデーションを追加する場合、Article
モデルに次のように記述します。
rubyclass Article < ApplicationRecord
has_many :comments, dependent: :destroy
validates :title, presence: true
validates :content, presence: true
end
コメントにも同様にバリデーションを追加できます。
rubyclass Comment < ApplicationRecord
belongs_to :article
validates :content, presence: true
end
これにより、タイトルや内容が空であった場合に保存できなくなります。
6. 結論
Railsにおけるモデルの設計と操作は非常に強力で柔軟です。記事とコメントのような一対多の関係を簡単に実現できるだけでなく、バリデーションや関連付けを活用することで、より堅牢なアプリケーションを作成することができます。これらの基本的な操作を理解し、実際のアプリケーションに適用することで、効率的なデータベース操作と整合性の取れたアプリケーションを構築できます。