🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

Q&A

解決済

1回答

1131閲覧

ActiveRecordでインスタンスの引き算?を実現したい

KinIroBlade

総合スコア18

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/01 06:04

ActiveRecordで少し質問があります。
次のような操作をしたいのですが、どうすれば③が動作しますでしょうか。

GroupA = Group.where(id:[1,2]) GroupA.pluck(:id) => [1, 2]

②GroupB = Group.where(id:2) GroupA.pluck(:id) => [2]

③GroupA = Group.where(id:[1,2]) GroupB = Group.where(id:2) GroupC = GroupA- GroupB GroupA.pluck(:id) => NoMethodError: undefined method `pluck'

始めからid:1だけを引っぱりだしたいというわけではないので、こういう操作をしたいのですが...
どうすればいいでしょうか。

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

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

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

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

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

Mugheart

2019/10/01 06:28

NoMethodError: undefined method `pluck' の後ろには何も書かれていませんでしたか? エラー文は省略せず提示してください
winterboum

2019/10/01 08:04

最後の GroupA.pluck(:id) の意図がわかりません。 GroupC.pluck(:id) ?
KinIroBlade

2019/10/01 10:38

おっしゃるとおり、最後のはGroupC.pluck(:id)でした... 申し訳ございません。
guest

回答1

0

ベストアンサー

ということですと、GroupC には期待通り id=1のものが入っているはずです。

ただし、pluckでは取れません。map(&:id) してみて下さい。

GroupA、GroupB は relation なので pluck がありますが、
引き算した結果は Arrayになっているので、pluckはありません

投稿2019/10/01 11:03

winterboum

総合スコア23567

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

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

KinIroBlade

2019/10/01 11:07

なるほど、すでにArrayになっているのですね! あと念のため質問なのですが、relationとしてGroupCを作る方法はありませんか? 初歩的な質問で申し訳ないです。
winterboum

2019/10/01 11:10

where(id: [1,2]).where.not(id: 2) とか。。。
winterboum

2019/10/01 11:11

where(id: (GroupA-GroupB).map(&:id) とか
winterboum

2019/10/01 11:13 編集

where(id: GroupA.pluck(:id)).where.not(id: GroupB.pluck(:id)) とか
Mugheart

2019/10/01 11:21

> Arrayになっているので、pluckはありません バージョンによります。
winterboum

2019/10/01 11:32 編集

そうなんですか! 知らなかった。 いくつからあるんでしょう。 Rails5にはあるんですね。無いとばかり思っていて、試しもしませんでした。 KinIroBlade さん。RAILSは4ですか? 5か6ですよね。 Mugheatさんが言われてた > NoMethodError: undefined method `pluck' > の後ろには何も書かれていませんでしたか? はどうだったでしょう
KinIroBlade

2019/10/02 02:29

NoMethodError: undefined method `pluck' for #<Array:0x007fab3c8d5927> でした。ここですでにArrayって書いてありましたね。エラー文から分かる情報を読み取れなかったのは申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問