質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

544閲覧

Rails indexアクションでthankテーブル・staffテーブル・regularholidayテーブルのデータを取得したい

masaosan18

総合スコア64

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/09/07 11:51

編集2020/09/07 12:35

indexアクションで複数テーブルのデータを取得したいと考えています。
どなたか詳しい方に教えていただきたいです。

ruby

1 def index 2 pagy, offices = pagy(Office.all) 3 pagy_headers_merge(pagy) 4 thanks = Thank.where(office_id: office.id) 5 staffs = Staff.where(office_id: office.id) 6 regular_holidays = RegularHoliday.where(office_id: office.id) 7 office.to_json(include: [:thanks, :staffs, :regular_holidays]) 8 end 9end
class Office < ApplicationRecord belongs_to :city has_many :reservations, dependent: :destroy has_many :office_images, dependent: :destroy has_many :bookmarks, dependent: :destroy has_many :browse_histories, dependent: :destroy has_many :staffs, dependent: :destroy has_many :regular_holidays, dependent: :destroy end
class RegularHoliday < ApplicationRecord belongs_to :office end
class Staff < ApplicationRecord belongs_to :office has_many :thanks, dependent: :destroy has_many :patients, dependent: :destroy end
class Thank < ApplicationRecord belongs_to :user belongs_to :staff scope :new_comer_by_office, -> (office) { where(office: office).order(created_at: :desc).first } end

staffのデータを表示させる必要はありませんでした。表示させたいものとしては、officeのデータ、thankの投稿日が一番新しいbodyカラムのデータ、regularholidayのnameカラムのデータです。それをjsonとしてまとめてみれるようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/09/07 12:26

Office が has_many :staffs で  Staff が has_many :thanks だと indexでどのように表示したいのでしょう。 それにより取り方も変わるかも、です。
masaosan18

2020/09/07 12:34

失礼しました。staffのデータを表示させる必要はありませんでした。表示させたいものとしては、officeのデータ、thankの投稿日が一番新しいbodyカラムのデータ、regularholidayのnameカラムのデータです。それをjsonとしてまとめてみれるようにしたいです。
winterboum

2020/09/07 12:37

Officeに属するStaffがもらうThanksのなかで一番新しいThanks(Officeに対して一つ)の bodyですか?
masaosan18

2020/09/07 12:38

ありがとうございます。はい!おっしゃる通りです。
masaosan18

2020/09/08 08:15

Thanksの一番新しいものではなく、すべてのデータを取得したい場合はどのようにすれば良いのでしょうか。
winterboum

2020/09/08 10:49

office.staffs[ i ].thanks で i番目のスタッフのThanks がとれます。 何もしなくてもこれでとれますが、それだとDBへのアクセスが目を覆うことになるので、 offices = Office.includes(staffs: :thansk) しておくと良いです。 あるofficeの、でしたら office = Office.includes(staffs: :thansk).find_by( officeを絞り込む条件 ) で
guest

回答1

0

officeのデータ、regularholidayのname、Officeに属するStaffがもらうThanksのなかで一番新しいThanks(Officeに対して一つ)の body
ですね。
を一つのアクセスで取る方法はありますが、私の力を越えます。Thanksが孫なので。。
のでそれはベストアンサーの方にお任せして、とりあえず仕事を先に進めるために。
model Office に
def thanks_body staffs.map(&:thanks).flatten. sort_by(&:created_at).last.body end
としておきます。
Office.to_json( methods: :thanks_body, include: {regularholidais: {only: :name }} )
で行けるかと。
ただこの方法は目を覆いたくなるほどDBへのアクセスがあります。きっと。
これを呼ぶ前に
Office.includes(:regularholyday,staffs: :thansk)
しておくと改善する、、、、するかなぁ。
def thanks_body を改良すればもそっと良くなると思いますが、それは思いついたら追記します。

投稿2020/09/07 23:07

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問