0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

幹事をランダムに設定する

Posted at

#前回投稿した記事の応用編

sampleメソッドを使って、より応用したBooleanの「true, false」を切り替えたいと思います。

この記事が少しでも良かったと思ったらLGTMを押していただけたら嬉しいです!!

##前提条件

group:memberrをたくさん持つ
member :たくさんのgroupに所属する
group_member : 中間テーブル

グループとメンバーは多対多の関係です!
そして、グループに加入したメンバーの中からランダムに幹事を設定できること。

流れとしては、
自動設定するを押すとグループに参加のメンバーの中から、
Role(役割)が、organizer(幹事)かregularにランダムに変わります。

今回はsampleメソッドを使うので、少し制限もつけます。
①幹事は一グループにつき一人まで
②メンバーは二回連続で幹事にならない

#イメージ図
qiita_boolean.png

#やること

中間テーブルに幹事を設定するカラムを追加

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 %>

これでランダムに幹事を設定できると思います!

#最後に
イメージ図の感じだと、まさかこんなに苦労するとは思いませんでした、、(笑)
もっとステップアップしていきたいと思います!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?