TIL
# 211117 TIL ([Ruby, slim] job 생성하기, 컨트롤러에 액션 정의하기)
inthess
2021. 11. 18. 10:56
장기현장실습
PLSnote 이슈
#2644 그룹에 탈퇴신청을 하고 일정기간이 지나면 탈퇴가 되는 기능 이슈 진행중
- UI 추가
- 사용자 기준: 탈퇴신청 UI 추가 (group_apply.html.slim) 현재는 어떤 기준 없이 버튼이 나타나지만 추후 해당 그룹을 30일 동안 사용하지 않은 경우에 탈퇴하기 버튼이 나오도록 수정할 예정
.col-auto .btn.btn-outline-danger i.fa.fa-minus-circle ' #{t('.withdrawal')}
- 그룹관리자 기준: 장기미사용 UI 추가 / 탈퇴신청일 UI 추가 (_user.html.slim) 장기 미사용 태그는 그룹에 30일 이상 접근하지 않은 사용자에게만 나타나도록 수정할 예정이고, 탈퇴신청일 태그 또한 탈퇴 신청을 한 사용자만 나타나고 사용자가 탈퇴 신청 버튼을 클릭한 날짜를 가져와 보여주도록 수정해야함
.row .col .badge.badge-warning.mt-1 = t('group_manager.users.index.long_term_unused') .col-auto .badge.badge-light.mt-3 = t('group_manager.users.index.withdrawal_date')
- 사용자 기준: 탈퇴신청 UI 추가 (group_apply.html.slim) 현재는 어떤 기준 없이 버튼이 나타나지만 추후 해당 그룹을 30일 동안 사용하지 않은 경우에 탈퇴하기 버튼이 나오도록 수정할 예정
- 기능 추가
- 사용자가 탈퇴버튼을 클릭 하고, 그룹 관리자가 따로 제거해주지 않을 경우 60일 뒤 자동 삭제되는 기능 구현중
- 사용자가 버튼을 클릭했을 때, link_to 뒤에 작성한 url로 이동한다. 이때 작성한 url이란 path를 의미하는데 여기서는 withdraw_user_group_path를 적어주었다. groups_controller.rb에 정의한 withdraw가 실행되도록 한다고 보면 된다. 여기서 현재 유저의 하나의 그룹에 대한 탈퇴 신청이기 때문에 current_user.id와 group.id를 필요로 한다.
# 탈퇴 버튼 코드(group_apply.html.slim) .col-auto = link_to withdraw_user_group_path(current_user.id, group.id, {group_id: group.id}), method: :post, class: 'btn btn-outline-danger' i.fa.fa-minus-circle ' #{t('.withdrawal')}
# 버튼 클릭 시, 실행될 액션(?) (groups_controller.rb) def withdraw job = DeleteGroupUserJob.set(wait: 60.day).perform_later(params[:group_id] , current_user.id) end
- 이렇게 컨트롤러에 새로운 액션을 정의했으면 routes.rb에 선언?해주어야 이를 다른 곳에서 불러서 사용할 수 있다. (잊지말자!!!)
resources :groups do member do post :apply delete :cancel_apply post :withdraw post :cancel_withdraw
- 버튼 클릭하면 잡이 생성되고 그 잡은 60일 뒤에 실행되도록 하였다. 그럼 잡이 할 일을 정의해야하는데 이건 jobs 폴더에 새로운 파일 delete_group_user_job.rb를 생성했다. Group_user 라는 테이블에서 탈퇴버튼 클릭한 사용자, 그룹의 user_id, group_id가 일치하는 것을 삭제하도록 코드를 작성했다.
class DeleteGroupUserJob < ApplicationJob queue_as :default def perform(group_id, user_id) user = GroupUser.where(group_id: group_id, user_id: user_id) user.destroy end end
- 버튼을 클릭해서 잡이 생성되는지까지 확인한 상태이고, 만약 60일 이전에 그룹관리자가 탈퇴처리를 해버리면 기존에 생성된 잡을 없애는 기능을 추가해야하는 상태이다.
- 사용자가 버튼을 클릭했을 때, link_to 뒤에 작성한 url로 이동한다. 이때 작성한 url이란 path를 의미하는데 여기서는 withdraw_user_group_path를 적어주었다. groups_controller.rb에 정의한 withdraw가 실행되도록 한다고 보면 된다. 여기서 현재 유저의 하나의 그룹에 대한 탈퇴 신청이기 때문에 current_user.id와 group.id를 필요로 한다.
- 사용자가 탈퇴버튼을 클릭 하고, 그룹 관리자가 따로 제거해주지 않을 경우 60일 뒤 자동 삭제되는 기능 구현중