Railsで1対多のモデルを作るには、belongs_to
とhas_many
を使います。
作者:1
と記事:多
の関係を作ってみます。
Step1. モデルの作成
作者
モデルを作ります。has_many :複数形
として、記事モデルに繋ぎます。
class Author < ApplicationRecord has_many :articles end
記事
モデルを作ります。belongs_to :単数形
として、作者モデルに繋ぎます。
class Article < ApplicationRecord belongs_to :author end
注意:Rails5
では、belongs_to
がデフォルトでnil
を許可していないため、許可する場合は次のようにします。
class Article < ApplicationRecord belongs_to :author, optional: true end
Step2. マイグレーション
記事
テーブルのarticles
と作者
テーブルのauthors
を作成します。
記事
テーブルのarticles
では、t.belongs_to :単数系
で作者テーブルのID
であるauthor_id
カラムを作成しています。
class Init < ActiveRecord::Migration[5.0] def change # 作者テーブル create_table :articles do |t| t.string :title t.belongs_to :author end # 作者テーブル create_table :authors do |t| t.string :name end end end
マイグレーションします。
$ rake db:migrate
使い方
article = Article.first author = Author.first
article
に登録されているauthor
を確認する。
p article.author
逆にauthor
に登録されているarticle
を確認する。
p author.articles
article
にauthor
を登録する。belongs_to
へ値を格納した時は自動で保存されないので、save
を呼ぶ。
if article.author != author article.author = author article.save! end
逆にauthor
にarticle
を追加する。has_many
側へ格納する場合は自動保存される。
unless author.articles.include?(article) author.articles << article end