質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

0回答

1400閲覧

毎週当番表をローテーションさせて保存したい

og33

総合スコア14

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/07/03 08:02

やりたいこと

・先週分の当番表の値をローテンションさせて、それを今週分として保存したい

現状の仕様

・当番表を作成する処理

def create_new_tobanhyo new_tobanhyo = Tobanhyo.where(start_of_period: Time.zone.today.ago(7.days)).map(&:dup) new_tobanhyo_group = new_tobanhyo.group_by(&:fixed) new_roles = new_tobanhyo_group[false].map(&:role_id).rotate new_tobanhyo_group[false].zip(new_roles).each do |hyo, new_role_id| hyo.start_of_period = Time.zone.today.strftime('%Y/%m/%d') hyo.role_id = new_role_id hyo.save! end new_tobanhyo_group[true].each do |hyo| hyo.start_of_period = Time.zone.today.strftime('%Y/%m/%d') hyo.save! end end

・DB情報

ActiveRecord::Schema.define(version: 20180703071547) do create_table "roles", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "rooms", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "fixed" end create_table "tobanhyos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.integer "room_id" t.integer "role_id" t.boolean "fixed" t.date "start_of_period" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end

やりたいこと

これまでは以下のような処理で当番表を作成していた。
1、1週間前の当番表をコピーする
2、fixedカラムでローテーションさせるroomをグループ分けする
3、ローテーションするroomには、先週のrole_idをローテーションさせた値を入れて保存する

これからは以下のようにしたいので処理を変更したい。
・今週からfixedの値を変更したいroomができた場合に、先週分のレコードを変更することなく対応したい

現状のDB設定で上記の処理を実現するためには、どのようにしたらよろしいでしょうか?
ご回答よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問