form_forで中間テーブルのカラム:status
をincomplete(未完了)
から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 2※TaskとParticipantの中間テーブル 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_id
がstatus: "done"
になった件数を絞り込んでいます。
回答1件
あなたの回答
tips
プレビュー