オーダーメイドコース
icon
icon

モデルの関連付け!ruby on railsで書くassociationの使い方【初心者向け】

Railsでassociationを使う方法を解説しています。Webアプリを開発する中では当然のように必要になってくるものなので使えるようにしておきましょう。実際にソースコードを見ながら理解していきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

RubyのフレームワークのRuby on Rails にはassociationという機能があります。これは、モデルとモデルを関連付けるためのもので、これを行うことによってコード内の操作がわかりやすくなります。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

大石ゆかり

田島メンター!!associationというのは何ですか〜?

田島悠介

associationはモデル同士を関連付けることを言うんだ。モデルとモデルに強い関連性があって、何かの処理を同時に行う必要がある場合などに役立つよ。

大石ゆかり

片方を消したらもう片方も消さないといけない、とかですか?

田島悠介

そんな感じだね。実際にどのようにモデル同士を関連付けるか見てみよう。

 

associationの書き方

今回はブログシステムを例に考えてみます。以下のように、ブログは一人のユーザー(User)に対して、たくさんの投稿(Post)が関連づけられています。

TechAcademyのブログ
|---初めてのRails
|---初めてのassotiation

これをコードで表すと以下のようになります。

class User
has_many :posts
end
class Post
belong_to :user
end

Userクラス内でpostsと複数形になっているのに注意してください。

このように、一つのユーザーに対して、多数の投稿を関連付けることができました。

 

田島悠介

“has_many”と”belogns_to”を使った1対多の関連付けだよ。英語で考えると分かりやすいね。

大石ゆかり

この場合だと、親要素のUserがたくさんのPostという子要素を持っている形になりますね。

田島悠介

こうすることによってUserを削除したとき、関連したPostのデータも同時に削除されるようになるんだ。

 

データの取得方法

TechAcademyのブログ
|---初めてのRails
|---初めてのassociation

先ほどと同じように、ブログのユーザーとポストで考えてみたいと思います。

user.posts.size            #=>2
user.posts[0].text     #=>初めてのRails
user.posts[1].text     #=>初めてのassociation
Parent.Children.要素名

で取得することができます。

 

[PR] 未経験からWebエンジニアを目指す方法とは

データの保存方法

次にデータの保存方法について説明します。

user = User.create(name: "TechAcademyのブログ")
post = user.posts.create(text: "初めてのRails")
user.name    #=>TechAcademyのブログ
user.posts[0].text   #=> 初めてのRails

また、以下のようにcreateの代わりにbuildを使うとデータベースに保存されずに使用することができます。

user = User.create(name: "TechAcademyのブログ")
post = user.posts.build(text: "初めてのRails")
user.name    #=>TechAcademyのブログ
user.posts[0].text   #=> 初めてのRails
post.persisted?   #=> false

 

合わせてマイグレーションの実行を行う方法などをまとめた記事もご覧ください。

簡単にassociationについて解説しました。

モデルを扱う上で大事な知識になりますので、是非理解を深めておきましょう。

 

田島悠介

関連付けられたものについて、データを取得したり保存する方法を解説したよ。

大石ゆかり

1対多の関係性は色々なものに適用できそうですね。

田島悠介

has_manyで関連付けを行った場合、対象のモデル名は複数形にすることを忘れないようにしよう。

大石ゆかり

分かりました。ありがとうございました!

 

[お知らせ]TechAcademyでは初心者でも8週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。RubyでWebアプリを開発したい方はご参加ください。