TIL

# 211119 TIL ([Ruby, slim] 리다이렉션 하기, 버튼 클릭하면 액션 실행 link_to)

inthess 2021. 11. 22. 11:39

장기현장실습

PLSnote 이슈

#2644 그룹에 탈퇴신청을 하고 일정기간이 지나면 탈퇴가 되는 기능 이슈 진행중 

  • 탈퇴 버튼을 클릭하면 job이 생기게 까지 구현했으니, 탈퇴 하기 버튼을 누르면 사용자에게 탈퇴 신청 취소하기 버튼이 보이게 하고, 신청 취소버튼을 누르면 job을 없애주는 cancel_withdraw가 실행되도록 구현하기 
    • Job_id가 없으면 탈퇴하기 버튼 + withdraw, 있으면 탈퇴 신청 취소하기 + cancel_withdraw  동작하도록 group_apply.html.slim 구현 
      • Job_id는 group_user에 있는 것을 사용해야해서 each문을 돌리는 table을 group_user로 수정
        - if current_user.group_users.present?
          - current_user.group_users.each do |group_user| 
            .card.mb-2 
              .card-body 
                .row 
                  .col-md-2 
                    h4 
                      .badge.badge-success 
                        | #{t('.participating')} 
                  .col 
                    h4= group_user.group.group_name 
                  .col 
                    = "#{t('group_manager_name')} : #{User.find(group_user.group.group_manager_id).name}" 
                  .col-auto 
                    - if group_user.job_id.nil? 
                      = link_to withdraw_user_group_path(current_user.id, group_user.group.id, {group_id: group_user.group.id}), method: :post, class: 'btn btn-outline-danger' 
                        i.fa.fa-minus-circle 
                        ' #{t('.withdraw')} 
                    - else 
                      = link_to cancel_withdraw_user_group_path(current_user.id, group_user.group.id, {group_id: group_user.group.id}), method: :post, class: 'btn btn-danger' 
                        i.fa.fa-undo 
                        ' #{t('.cancel_withdraw')}
    • 버튼을 클릭하고  변경사항이 자동으로 바뀌기 위해서는 redirection 필요 -> group_apply  이동하도록 코드 추가
      def withdraw 
        job = DeleteGroupUserJob.set(wait: 60.day).perform_later(params[:group_id] , current_user.id) 
        if job
          @group_user = current_user.group_users.find_by(group_id: params[:group_id]) 
          @group_user.update job_id: job.provider_job_id 
          redirect_to group_apply_user_path 
        end  
      end 
       
      def cancel_withdraw 
        @group_user = current_user.group_users.find_by(group_id: params[:group_id]) 
        Sidekiq::ScheduledSet.new.find_job(@group_user.job_id)&.delete 
        @group_user.update job_id: nil 
        redirect_to group_apply_user_path 
      end