質問: 私は現在、Railsを使ってシフト作成アプリを開発中の者です。 制作途中のサイトのイメージ↓ ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/9dff2ec2a0d9aeaf6d862aaae27943c7.png) DBのER図↓ ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/2f6ed08038819313b0d3a0880663ef99.png) ### 解説 * 2行目はMeetingモデルによってイベント行事を記入する場所 * 1列目はStaff_nameモデルに名前を登録し、each文で引っ張ってきて表示 * プルダウン式のSELECTフォームはShiftモデルに登録した内容を表示 というような過程でここまで表示できたのですが、これだとデータベースに保存できないことに気づき、、、(笑) 行き詰ってしまいました。 やりたいこと ------ SELECTフォームで入力した内容を保存したいです。 例えば1日のテスト君3は早番のような感じ。 Staff_nameとShiftを多対多の関係でつなげる方法があるのかな、と思いますが、同時にdateカラムもつけたいので、そのあたりをどう表せばいいのかなと思っています。 わからないことやほかに知りたいことも答えますので、どなたかご教授お願い致します。
回答: コメント欄で指摘されている点と共通しますが、まずUserとStaffの関連がよくわかりません。 持っている項目から推察するに、Userはこのシステムの利用者だと思います。 で、「Staffもこのシステムの利用者」であるなら、StaffからUserの関連があるのはおかしくない気はします(Userが親でStaffはその派生となる親子関係)。ただし、そうであるなら、Staffテーブルには「name」等は不要だと思います。(Userテーブルを参照すれば良いため) また、シフトに関する関連は全てStaffに対するものであって、Userとは関連しないはずです。例えばこれがコンビニの勤務シフト管理システムだとすると、「オーナー」とか「フランチャイズ本部の人間」がUserであってもStaffではない、というケースが考えられるためです。 そしてShiftテーブルについてですが、これが「早番」「遅番」などの「シフトという概念の定義(シフトのパターン)」であるなら、「シフト管理」テーブルのようなものを別途作成し、そこに「StaffのId」「日付」「ShiftのId」を保存すれば、たぶんやりたいことが表現できる気がします。 > > 大体シフトの内容というのは何パターン(早番、遅番、早上がりなど)かに決まっているので、あらかじめいくつかシフトパターンを用意しておいて、スタッフとシフトを日付とともにつなぎ合わせようかと考えておりました。 > > > これは「シフト管理」テーブル的なものに登録(追加)する時に参照する情報として、Staffテーブルに「Shift初期値」みたいな項目として「ShiftのId」を持っておくか、別テーブルにそういう関連情報を持たせておくのが普通かなと。 追記 「Shift」というテーブル名が「シフトのパターン」だというのは直感的にわかりにくいので「ShiftPattern」等の具体的な名前にした方が良いと思います。 追記2 質問文中にはこのプログラムのユースケースをちゃんと記載してください。上記回答は画面のコピーがER図がら色々と察して(想像して)書いてますが、そこが違った場合に全く意味をなさない回答になってしまいます。 「あなたにしかわからない情報」はちゃんと書きましょう。