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

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

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

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1277閲覧

多対多 データ取得について

Taka2401

総合スコア8

Ruby

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/10/15 12:30

#前提条件

group:memberrをたくさん持つ
member :たくさんのgroupに所属する
group_member :中間テーブル

各グループの詳細ページで参加中と不参加のメンバーを一覧表示しています。

イメージ説明

#問題点
group1のページでは参加中と不参加のメンバーを区別できましたが、
一度グループに参加してしまうと他のグループで不参加に表示されないです。

※teset2も不参加ですが表示されません。

イメージ説明

該当コード

# グループ詳細ページ <p id="notice"><%= notice %></p> <h1> <%= @group.name %>のメンバー一覧 </h1> <h2> グループに参加のメンバー </h2> <table> <thead> <tr> <th>Name</th> <th>Role</th> </tr> </thead> <tbody> <%= form_with(model:[@group, @group_member], local: true) do |f| %> <% @group.group_members.each do |group| %> <tr> <td><%= group.member.name %></td> </tr> <% end %> <% end %> </tbody> </table> <h2> グループに不参加のメンバー </h2> <table> <thead> <tr> <th>Name</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @not_groups.each do |member| %> <tr> <td><%= member.name %></td> </tr> <% end %> </tbody> </table>
class GroupsController < ApplicationController def show   # ここの定義で詰まっています。 @not_groups = Member.where.not(id: Member.joins(:members).group(:member_id)) end end

##仮説
コントロラーの**Member.joins(:groups)**で、すべてのグループからmember_idを参照しているから、
一度でも参加すると不参加に表示されないでいる。

##やりたいこと
各グループのidを参照して、不参加のメンバーを表示したいです。

##試したこと

モデルにメソッドを追加し、コントロラーやビューファイルで組み合わせてみましたがエラーになりました。

group.rb

1 has_many :group_members 2 has_many :members, through: :group_members 3 accepts_nested_attributes_for :group_members 4 5 # 追加 6 scope :search_id, ->(group_id) { where(id: group_id) }

自分でも整理できていないところがあり、うまくまとめられずすみません。
何か解決の糸口になるヒントを頂けると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

あるGroup 'group' に属するMemberは group.members です。
ので、属さないMemberは
Member.where.not(id: group.members.ids)

投稿2021/10/15 13:10

winterboum

総合スコア23360

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

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

Taka2401

2021/10/15 13:35

早速のご回答ありがとうございます。 無事に表示させることができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問