railsのincludesメソッドで関連しているデータを取得する

こんにちは、まくロロです。申請していたアドセンスがついに通りました!引き続き、プログラミンとブログを頑張って続けて行きたいと思います。

includesメソッドとは

railsのincludesメソッドは複数のアソシエートしているテーブルの値を取得することができます。例えばこのようなことがしたい時です。

ECサイトにおいて、ユーザーとそのユーザーの商品受け取り情報は1対1の関係でアソシエートしていなければいけませんね。

ここでいう商品受け取り情報とは、何日の何時にどのような支払い方法で「クレジット」か「代金引き換え」かどうかなどの情報だよ

1対1でなければ商品を購入した人に、いつ、どんな支払い方法で届けれなければならないかどうかなどがわからなくなってしまいますよね。。

具体的な流れとしては例えば、

  • hogeというユーザがECサイトで商品を購入する
  • hogeがformで配達日時と支払い方法を記入する
  • 最終確認画面で購入する商品と先ほど入力した情報をveiwで出力
  • このような流れの処理でユーザとそのユーザに付随している、配達情報など(購入手続き情報)を結びつける必要があります。

    そんな時にrailsではincludesメソッドを使用することで、正しい情報を取得するということです。

    では、実際今の例えをコードで見ていきましょう。

    ユーザに付随する購入手続き情報を取得しよう

    やりたいこととしてはhogeの購入手続き情報を最終確認画面でviewに表示することです。

    まず、結論のコードから載せます。

    info = Procedure.includes(:user)
    @info = info.find_by(user_id: current_user.id)

    前提条件として

  • Procedureモデルにユーザの購入手続き情報が格納
  • procedureテーブルにはuser_idカラムが存在
  • Userモデルでhas_one、Procedureモデルでbelongs_toのアソシエートを設定
  • sessions_helperでcurrent_userを定義
  • 上記の前提条件を設定した上で先ほどのincludesメソッドとfind_byメソッドでユーザーに付随している購入手続き情報を取得することができます。

    やっていることとしてはまず変数infoにuserテーブルと紐づいているproceduresテーブルの値を代入してます。

    そのあとfind_byでuser_idが現在ログインしているユーザのidと一致しているものを抜き出すことによって、現在のユーザと紐づいているprocedureオブジェクトを取得しています。

    なので例えば、proceduresカラムに以下のようなカラムを作ると

    iddaytimepayuser_id
    12019-3-1910:00~17:00クレジット20
    22019-3-2015: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のメソッドは便利なものがたくさんあるのでこれからも便利だなーと思うものを紹介したいと思います。

    railsでのカラム操作前のページ

    Dockerとは次のページ

    関連記事

    1. プログラミング

      RailsからGolangを習得する際の壁

      こんにちはまくロロです。今回はRailsからGolangを習得する際…

    2. プログラミング

      サーバーの種類について学ぼう

      こんにちはマクロロです。今回はサーバーの種類について簡単に基礎を習得…

    3. プログラミング

      Goでのクロージャ

      久しぶりの更新です。最近は就活関係で色々と忙しくブログの更新ができて…

    4. プログラミング

      dockerを使ってGolangの環境構築

      こんにちは、まくロロです。最近はサーバーをGo、フロントにR…

    5. プログラミング

      railsにreactを導入してみよう

      最近、自分で作っているポートフォリオがあるのですが、フロントをオシャ…

    6. プログラミング

      基本的なRuby on Railsの概念

      こんにちは、まくロロです。今回は初めて技術系の記事を書きたい…

    コメント

    1. この記事へのコメントはありません。

    1. この記事へのトラックバックはありません。

    最近の記事

    PAGE TOP