총무를 무작위로 설정
지난번 게시한 기사의 응용편
sample 메소드를 사용해, 보다 응용한 Boolean의 「true, false」를 전환하고 싶습니다.
이 기사가 조금이라도 좋았다고 생각하면 LGTM을 눌러 주시면 기쁩니다! !
전제 조건
group: members 많은
member : 많은 group에 소속된다
group_member : 중간 테이블
그룹과 멤버는 다 대다 관계입니다!
그리고 그룹에 가입한 멤버 중에서 랜덤하게 간사를 설정할 수 있는 것.
흐름으로서는
자동설정을 누르면 그룹에 참여하는 멤버 중에서
Role(역할)이 organizer(간사) 또는 regular로 무작위로 바뀝니다.
이번에는 sample 메소드를 사용하기 때문에 조금 제한도 붙입니다.
① 간사는 한 그룹당 한 명까지
② 멤버는 2회 연속으로 간사가 되지 않는다
이미지 다이어그램
할 일
중간 테이블에 총무를 설정하는 열 추가
rails g migration AddOrganizerToGroupMembers organizer:boolean
boolean 상태
false의 경우⇒⇒regular
true의 경우 ⇒ organizer
마이그레이션 파일 설정은 default를 false로 설정합니다.
class AddOrganizerToGroupMembers < ActiveRecord::Migration[6.1]
def change
add_column :group_members, :organizer, :boolean, default: false
end
end
라우팅 설정
resources :groups, only: %i[show new edit create update destroy] do
resources :group_members, only: %i[create destroy]
post 'random_organizer' => 'group_members#organizer'
end
컨트롤러 설정
def organizer
# グループidを取得
group = Group.find(params[:group_id])
# organizerメンバーを1つ取得
organizer = group.group_members.find_by(organizer: true)
# regularメンバーを取得
regular_members = group.group_members.where(organizer: false)
# グループメンバーのregularが存在していれば、ランダムにtrueに変更
regular_members.sample.update(organizer: true) if regular_members.present?
# グループメンバーのorganizerが存在していればorganizerをfalseに変更
organizer.update(organizer: false) if organizer
redirect_to request.referer
end
해설
①regular_members에서 regular 멤버 중에서
sample.update에서 임의로 하나만 true로 전환합니다. (regular ⇒ organizer)
②organizer.update(organizer: false) if organizer로 간사를 반드시 false로 하므로,
절대로 두 번 연속으로 간사가 되지 않는다. (organizer ⇒⇒regular)
뷰 화면
<%= link_to "自動設定する", group_random_organizer_path(@group), method: :post %>
이제 무작위로 간사를 설정할 수 있다고 생각합니다!
마지막으로
이미지도의 느낌이라고 설마 이렇게 고생한다고는 생각하지 않았습니다,, (웃음)
더 스텝 업 해 가고 싶습니다! !
Reference
이 문제에 관하여(총무를 무작위로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkht2401/items/4acb9169934477e057b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
할 일
중간 테이블에 총무를 설정하는 열 추가
rails g migration AddOrganizerToGroupMembers organizer:boolean
boolean 상태
false의 경우⇒⇒regular
true의 경우 ⇒ organizer
마이그레이션 파일 설정은 default를 false로 설정합니다.
class AddOrganizerToGroupMembers < ActiveRecord::Migration[6.1]
def change
add_column :group_members, :organizer, :boolean, default: false
end
end
라우팅 설정
resources :groups, only: %i[show new edit create update destroy] do
resources :group_members, only: %i[create destroy]
post 'random_organizer' => 'group_members#organizer'
end
컨트롤러 설정
def organizer
# グループidを取得
group = Group.find(params[:group_id])
# organizerメンバーを1つ取得
organizer = group.group_members.find_by(organizer: true)
# regularメンバーを取得
regular_members = group.group_members.where(organizer: false)
# グループメンバーのregularが存在していれば、ランダムにtrueに変更
regular_members.sample.update(organizer: true) if regular_members.present?
# グループメンバーのorganizerが存在していればorganizerをfalseに変更
organizer.update(organizer: false) if organizer
redirect_to request.referer
end
해설
①regular_members에서 regular 멤버 중에서
sample.update에서 임의로 하나만 true로 전환합니다. (regular ⇒ organizer)
②organizer.update(organizer: false) if organizer로 간사를 반드시 false로 하므로,
절대로 두 번 연속으로 간사가 되지 않는다. (organizer ⇒⇒regular)
뷰 화면
<%= link_to "自動設定する", group_random_organizer_path(@group), method: :post %>
이제 무작위로 간사를 설정할 수 있다고 생각합니다!
마지막으로
이미지도의 느낌이라고 설마 이렇게 고생한다고는 생각하지 않았습니다,, (웃음)
더 스텝 업 해 가고 싶습니다! !
Reference
이 문제에 관하여(총무를 무작위로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkht2401/items/4acb9169934477e057b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rails g migration AddOrganizerToGroupMembers organizer:boolean
class AddOrganizerToGroupMembers < ActiveRecord::Migration[6.1]
def change
add_column :group_members, :organizer, :boolean, default: false
end
end
resources :groups, only: %i[show new edit create update destroy] do
resources :group_members, only: %i[create destroy]
post 'random_organizer' => 'group_members#organizer'
end
컨트롤러 설정
def organizer
# グループidを取得
group = Group.find(params[:group_id])
# organizerメンバーを1つ取得
organizer = group.group_members.find_by(organizer: true)
# regularメンバーを取得
regular_members = group.group_members.where(organizer: false)
# グループメンバーのregularが存在していれば、ランダムにtrueに変更
regular_members.sample.update(organizer: true) if regular_members.present?
# グループメンバーのorganizerが存在していればorganizerをfalseに変更
organizer.update(organizer: false) if organizer
redirect_to request.referer
end
해설
①regular_members에서 regular 멤버 중에서
sample.update에서 임의로 하나만 true로 전환합니다. (regular ⇒ organizer)
②organizer.update(organizer: false) if organizer로 간사를 반드시 false로 하므로,
절대로 두 번 연속으로 간사가 되지 않는다. (organizer ⇒⇒regular)
뷰 화면
<%= link_to "自動設定する", group_random_organizer_path(@group), method: :post %>
이제 무작위로 간사를 설정할 수 있다고 생각합니다!
마지막으로
이미지도의 느낌이라고 설마 이렇게 고생한다고는 생각하지 않았습니다,, (웃음)
더 스텝 업 해 가고 싶습니다! !
Reference
이 문제에 관하여(총무를 무작위로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkht2401/items/4acb9169934477e057b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def organizer
# グループidを取得
group = Group.find(params[:group_id])
# organizerメンバーを1つ取得
organizer = group.group_members.find_by(organizer: true)
# regularメンバーを取得
regular_members = group.group_members.where(organizer: false)
# グループメンバーのregularが存在していれば、ランダムにtrueに変更
regular_members.sample.update(organizer: true) if regular_members.present?
# グループメンバーのorganizerが存在していればorganizerをfalseに変更
organizer.update(organizer: false) if organizer
redirect_to request.referer
end
<%= link_to "自動設定する", group_random_organizer_path(@group), method: :post %>
이제 무작위로 간사를 설정할 수 있다고 생각합니다!
마지막으로
이미지도의 느낌이라고 설마 이렇게 고생한다고는 생각하지 않았습니다,, (웃음)
더 스텝 업 해 가고 싶습니다! !
Reference
이 문제에 관하여(총무를 무작위로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tkht2401/items/4acb9169934477e057b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(총무를 무작위로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkht2401/items/4acb9169934477e057b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)