こんにちは、まくロロです。申請していたアドセンスがついに通りました!引き続き、プログラミンとブログを頑張って続けて行きたいと思います。
目次
includesメソッドとは
railsのincludesメソッドは複数のアソシエートしているテーブルの値を取得することができます。例えばこのようなことがしたい時です。
ECサイトにおいて、ユーザーとそのユーザーの商品受け取り情報は1対1の関係でアソシエートしていなければいけませんね。
ここでいう商品受け取り情報とは、何日の何時にどのような支払い方法で「クレジット」か「代金引き換え」かどうかなどの情報だよ
1対1でなければ商品を購入した人に、いつ、どんな支払い方法で届けれなければならないかどうかなどがわからなくなってしまいますよね。。
具体的な流れとしては例えば、
このような流れの処理でユーザとそのユーザに付随している、配達情報など(購入手続き情報)を結びつける必要があります。
そんな時にrailsではincludesメソッドを使用することで、正しい情報を取得するということです。
では、実際今の例えをコードで見ていきましょう。
ユーザに付随する購入手続き情報を取得しよう
やりたいこととしてはhogeの購入手続き情報を最終確認画面でviewに表示することです。
まず、結論のコードから載せます。
info = Procedure.includes(:user) @info = info.find_by(user_id: current_user.id)
前提条件として
上記の前提条件を設定した上で先ほどのincludesメソッドとfind_byメソッドでユーザーに付随している購入手続き情報を取得することができます。
やっていることとしてはまず変数infoにuserテーブルと紐づいているproceduresテーブルの値を代入してます。
そのあとfind_byでuser_idが現在ログインしているユーザのidと一致しているものを抜き出すことによって、現在のユーザと紐づいているprocedureオブジェクトを取得しています。
なので例えば、proceduresカラムに以下のようなカラムを作ると
id | day | time | pay | user_id |
1 | 2019-3-19 | 10:00~17:00 | クレジット | 20 |
2 | 2019-3-20 | 15:00~19:00 | 代金引換 | 30 |
hogeがのuser.idが20だった場合、proceduresテーブルのuser_id:20のrow、すなわち、id:1のrowの情報がオブジェクトとして取得できます。
ECサイトの最終確認画面でこれらの情報をviewで表示したければ、
<%= @info.day %> # 2019-3-19 <%= @info.time %> # 10:00~17:00 <%= @info.pay %> # クレジット
こんな感じで出力することができます。
まとめ
今回はアソシエートしているテーブルの情報を取得することができるincludesメソッドを紹介しました。
railsのメソッドは便利なものがたくさんあるのでこれからも便利だなーと思うものを紹介したいと思います。
この記事へのコメントはありません。