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

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

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

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

Q&A

解決済

1回答

738閲覧

Rails/countが正しく表示されない。

ssssyyyy

総合スコア26

Ruby on Rails

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

0グッド

0クリップ

投稿2021/01/07 07:07

編集2021/01/07 13:15

form_forで中間テーブルのカラム:statusincomplete(未完了)からdone(完了)に変えた数をカウントしたいのですが、目的を作成したユーザーしかカウントがされません。DBには保存されています。どのように記述すれば、カウントがされるかご教示いただけると幸いです。
宜しくお願い致します。

views/participant_tasks/index.html.erb

ruby

1 2~省略~ 3 4<% @purpose.tasks.each do |task| %> 5 <div class="mt-2"> 6 7↓status更新 8 9 <%= form_for([@purpose, current_user.participants.find_by(purpose_id: @purpose.id), current_user.participants.find_by(purpose_id: @purpose.id).participant_tasks.find_by(task_id: task.id)]) do |form| %> 10 <%= task.list %>: 11 <%= task.percent %>% 12 <%= form.select :status, ParticipantTask.statuses_i18n.map{|key, value| [ParticipantTask.statuses_i18n[key], key]} %> 13 <%= form.submit "更新", class: 'btn btn-secondary' %> 14 <% end %> 15 </div> 16<% end %> 17 18↓count 19 20<% @purpose.tasks.each do |task| %> 21 <div class="mt-2"> 22 <%= task.percent %>%完了:<%= @purpose.participants.find_by(purpose_id: @purpose.id).participant_tasks.where(task_id: task.id, status: "done").count %>人 23 </div> 24<% end %> 25

controller(participant_tasks_controller.rb)

ruby

1 2def index 3 @purpose = Purpose.find_by(id: params[:purpose_id]) 4end 5

view画面

イメージ説明

###追記

1、 関係するmodelのcode。関連定義の所

Ruby

1 2class Purpose < ApplicationRecord 3 4 belongs_to :user 5 6 has_many :tasks 7 accepts_nested_attributes_for :tasks, allow_destroy: true 8 9 has_many :participants 10 has_many :participant_users, through: :participants, source: 'user' 11 12end 13

Ruby

1 2class Participant < ApplicationRecord 3 belongs_to :user 4 belongs_to :purpose 5 6 has_many :participant_tasks 7end

Ruby

1class Task < ApplicationRecord 2 belongs_to :purpose 3 4 has_many :participant_tasks 5end

Ruby

1 2TaskParticipantの中間テーブル 3 4class ParticipantTask < ApplicationRecord 5 enum status:{incomplete: 0,done: 1} 6 #incomplete:未完了, done:完了 7 8 belongs_to :participant 9 belongs_to :task 10end 11

アプリ概要
・ユーザーは目的(例:●●本を読破する!)のコミュニティを作成できる。
・目的作成時に、目的の進捗状況を管理する為タスク(例:第一章完了)を設定できる。※目的モデルとタスクモデルを1:多で設定
・会員登録しているユーザーは作成されている目的に参加が出来る。
・ユーザー同士で参加している目的のタスクの進捗(完了・未完了)を確認し合える。

現状解決できない内容としてカウント出来るのが、目的を作成したユーザーのみとなっている状態です。

2、 <%= task.percent %>%完了:<%= @purpose.participants.find_by.... の行の@purpose.participants.find_by....は何を求めようとしているのか、説明してください(絞り込み条件も)
@purpose(目的)participants(参加)しているpurpose_idを絞り込み、さらにparticipant_tasksで該当のtask_idstatus: "done"になった件数を絞り込んでいます。

[ER図]
イメージ説明

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

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

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

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

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

winterboum

2021/01/07 11:58

質問が分かりにくいので以下載せてください 1 関係するmodelのcode。関連定義の所 2. <%= task.percent %>%完了:<%= @purpose.participants.find_by.... の行の@purpose.participants.find_by....は何を求めようとしているのか、説明してください(絞り込み条件も)
ssssyyyy

2021/01/07 13:17

失礼致しました。追記致しました。ご確認お願い致します。
guest

回答1

0

ベストアンサー

わからん、、、
「2、 <%= task.percent %>%完了:<%= @purpose.participants.find_by.... の行の@purpose.participants.find_by....は何を求めようとしているのか、説明してください(絞り込み条件も)
→@purpose(目的)にparticipants(参加)しているpurpose_idを絞り込み、さらにparticipant_tasksで該当のtask_idがstatus: "done"になった件数を絞り込んでいます。」
viewのcode<%= task.percent %>%完了:<%= ..... count %>をみると、タスク毎にdone"になった件数を表示したいのでは?と見えるのです
なのに、なぜ「@purpose(目的)にparticipants(参加)しているpurpose_idを絞り込み」が必要なのでしょう?
単純に ParticipantTask.where(task_id: task.id, status: "done").count だと何がまずいですか?

投稿2021/01/07 23:08

winterboum

総合スコア23331

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

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

ssssyyyy

2021/01/08 11:20

返信ありがとうございます。 無駄に色々考えすぎて絞り込みをしておりました‥。 ご回答の通りにしたらあっさり問題解決致しました。 悩ませてしまい申し訳ございませんっ ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問