0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【pluckの使い方】複数のデータがあり絞り込みが出来ない場合

Last updated at Posted at 2022-02-10

●状況
DBに大量にデータのあるテーブルA、テーブルB、テーブルCが存在する

①テーブルBはテーブルAのカラム1と一致するデータを検索
②テーブルCは、上記で絞り込んだテーブルBのカラム2と一致するデータを検索

model
  テーブルA.each do |sample|
   hoge = テーブルB.where(カラム1: sample.カラム1)
   hoge2 = テーブルC.where(カラム2: hoge.カラム2)

  〜省略〜

  end

上記を実行すると、「underfind method カラム2 for 〜」とエラーが発生する。

●解決策
テーブルCが複数のデータが必要な場合、
一度hogeの時点でカラム2の配列情報にして渡す必要がある。

現状の内容は、
hogeの内容を見ると下記のように「ActiveRecord::Relation」型となっている。

#=><ActiveRecord::Relation [
#<User id: nil, カラム1: "aaa", カラム2: 111>, 
#<User id: nil, カラム1: "bbb", カラム2: 222>, 
#<User id: nil, カラム1: "ccc", カラム2: 333>
#], >

これを配列にして渡すことで、テーブルCも必要な絞り込みが出来るようになる。
そのため、下記のように記載するとエラーが出ずに渡せる。

model
  テーブルA.each do |sample|
   hoge = テーブルB.where(カラム1: sample.カラム1).pluck(:カラム2)
   hoge2 = テーブルC.where(カラム2: hoge.カラム2)

  〜省略〜

  end

参考記事:
【Rails】カラムの値を配列の形で取得したい場合に使えるpluckメソッドを徹底解説
https://coffee-engineer4.com/2021/06/12/%E3%80%90rails%E3%80%91%E3%82%AB%E3%83%A9%E3%83%A0%E3%81%AE%E5%80%A4%E3%82%92%E9%85%8D%E5%88%97%E3%81%AE%E5%BD%A2%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AB/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?