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] Rubyのプログラミングで挫折しない学習方法を動画で公開中

データの保存方法

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

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アプリを開発したい方はご参加ください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する