はじめに
私は現在、Railsを使ってシフト作成アプリを開発中の者です。
###解説
- 2行目はMeetingモデルによってイベント行事を記入する場所
- 1列目はStaff_nameモデルに名前を登録し、each文で引っ張ってきて表示
- プルダウン式のSELECTフォームはShiftモデルに登録した内容を表示
というような過程でここまで表示できたのですが、これだとデータベースに保存できないことに気づき、、、(笑)
行き詰ってしまいました。
##やりたいこと
SELECTフォームで入力した内容を保存したいです。
例えば1日のテスト君3は早番のような感じ。
Staff_nameとShiftを多対多の関係でつなげる方法があるのかな、と思いますが、同時にdateカラムもつけたいので、そのあたりをどう表せばいいのかなと思っています。
わからないことやほかに知りたいことも答えますので、どなたかご教授お願い致します。
私の理解不足なのですが、なぜ「データベースに保存できない」と思われたのですか?
また、ここではUserに紐付けされるというより、staffが重要なドメインであるような気がします。なぜUserに紐付けしようとされたのですか?
返信ありがとうございます!
私のイメージでは、上の図で説明しますが、最終的には「1日のテスト君1は早番」、「4日のテスト君3は遅番」というデータをDBに保存したいと思っています。そのため事前にUserに紐づけしたStaff_nameとShiftにそれぞれスタッフ名、シフトの内容を登録しておき、そこから引っ張ってくる形をとりました。
スタッフ名とシフト内容はそれぞれStaff_nameとShiftでCRUD操作が行えるようにしています。
Meetingはただ単にイベントを追加するためのものなのでUserに紐付けています。
私が説明下手で申し訳ございません。納得されませんでしたら、もっとおっしゃってください!
「データベースに保存できない」という点につきましては、上の図まで作り上げて、とりあえず適当にシフト内容を入力し、翌週のページを表示してそのあとすぐ元の週に戻してみました。すると先ほどの入力が反映されていませんでした。
もしそのまま反映させるのであれば、どのスタッフの(Staff_name)、いつ(date)、何を(Shift)という3つのデータカラムをもつテーブルを作成する必要があるのかなと思いますが、これをどう表すのかにとまどっています。
ありがとうございます。
おそらく、Userはログインなどに関わる認証コンテキストの部分ですから、Userとstaffは概念的に異なるのかと思われます。
また、Shiftのコンテキストにおいてはstaffというメンバーとshiftの内容、日付などが関わってくるのではないかと思います。
ですから、Shiftのテーブルには日付、staff_id、content(or shift_content_id)という内容になるのではないですか?
とはいうものの、実際の場面に即した設計を行うには、十分にその利用用途を知っている方にしかできません。
例えば、shiftを作成する人が誰かという概念やそのshiftに所属できる人の概念もあるんじゃないかなと思います。認証に密接に関わってくる部分もあるでしょうから、その辺の事情を考慮した納得のいく回答を得るにはなかなか難しいかもしれません。
丁寧なお返事ありがとうございます!
確かに設計者の概念が関わる問題ですね。
それにShiftはUserに紐づけせずに、Staff_nameへ紐付けしていいですね!
ただし確認ですが、Shiftテーブルに日付とstaff_idを入れるとする場合、そのスタッフのシフトを毎回入力する形になりますよね?
大体シフトの内容というのは何パターン(早番、遅番、早上がりなど)かに決まっているので、あらかじめいくつかシフトパターンを用意しておいて、スタッフとシフトを日付とともにつなぎ合わせようかと考えておりました。
この場合はStaff_nameとShiftを多対多の関係にする必要はないでしょうか?
何度も質問して申し訳ございません。
ここでShiftというのはパターンが格納されているもののことですよね。staffとそのパターンがどのような関係になっているのかいまいちわかっていません。
何かフローを表すようなshiftの申請を表すデータがあって、そこには申請者(staff)、shiftのパターン、時刻などが記載されているはずです。直接的に多対多のような関係になる理由を「私が」今理解していないので、お答えできかねます。すみません。
回答1件
あなたの回答
tips
プレビュー