前提・実現したいこと
リレーションでスマートに値を取ってくる方法について分からなくなってしまいました。
どなたかご存知の方がいらっしゃいましたら教えて頂けないでしょうか?
Railsでタスク管理アプリケーションを作っています。
やりたいことは、
自分が所属している全てのグループの全てのユーザーの全てのタスクの取得、です。
状況
タスク管理アプリにおいて割と良くあるリレーションだと思います。
- userは複数のタスクを持っている
- タスクは必ず1人のuserに属する
- グループには沢山のユーザーが入りうるし、1人のユーザーも複数のグループに所属しうる(中間テーブルを作っています)
この時、tasks_controllerのindexアクションにて、お作法通り @tasks
の中身に表示したい全てのタスクを入れたいです。
その表示したいタスクというのは、表題にもある通り、自分が所属している全てのグループの全てのユーザーの全てのタスクです。
以下リレーション部分のコードです。
task.rb
belongs_to :user
user.rb
has_many :tasks, dependent: :destroy has_many :group_users, dependent: :destroy has_many :groups, through: :group_users
group.rb
has_many :group_users, dependent: :destroy has_many :users, through: :group_users
group_user.rb
belongs_to :group belongs_to :user
何重かの繰り返し処理が必要になるかと思いますが、最後まで形になりませんでした...
map、to_a、flattenメソッドなどを使いましたが上手くいきませんでした。
current_user.groups
でログイン中のユーザーが所属しているグループの配列が取れます。
group.users
でそのグループに所属しているユーザーも取れます。
userが1人に絞り込めれば、 user.tasks
でそのユーザーのタスクももちろん取得できます。
これらを組み合わせるのが難しいです。
それともこのような要件の場合には、このように間接的にデータを取ってくるのではなく、新たに中間テーブルなどを作成するものですか?
補足情報(FW/ツールのバージョンなど)
- Ruby2.7.0
- Rails6.0.2
皆さま、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 10:19