前提
Rails5で勤怠管理のシステムを作っています。
ひと月分の社員のシフトを登録する際に
選択フィールド1つで
登録するレコード全てに反映させたいのですが
いい方法があればご教示いただきたいです。
実現したいこと
・特定の社員のひと月分のシフトを一括登録したい
・社員はプルダウンで選択したい
・プルダウンで選択した社員のuser_idをひと月分のレコードに反映させたい
発生している問題・エラーメッセージ
Validation failed: User must exist
該当のソースコード
Ruby
1#コレクション 2class Form::WorkCollection < Form::Base 3 FORM_COUNT = 31 4 attr_accessor :works 5 6 def initialize(attributes = {}) 7 super attributes 8 self.works = FORM_COUNT.times.map { Work.new() } unless self.works.present? 9 end 10 11 def works_attributes=(attributes) 12 self.works = attributes.map { |_, v| Work.new(v) } 13 end 14 15 def save 16 Work.transaction do 17 self.works.map do |work| 18 work.save! 19 end 20 end 21 end 22end
Ruby
1#コントローラー 2def create 3 @form = Form::WorkCollection.new(work_collection_params) 4 if @form.save 5 flash[:success] = 'シフトを登録しました' 6 redirect_to works_path 7 else 8 flash.now[:failed] = "シフトの登録に失敗しました" 9 render :index 10 end 11 end
Ruby
1#ビュー 2<%= form_with(model: @form, url: works_path, method: :post, local: true) do |f| %> 3 <%= f.label :user_id, '社員選択' %> 4 <%= f.collection_select :user_id, User.all, :id, :name, :include_blank =>'選択してください' %> 5 <table> 6 <%= f.fields_for :works do |w| %> 7 <% @next_month.each do |d| %> 8 <tr> 9 <td> 10 <%= w.date_field :shift, value: d, readonly: true %> 11 </td> 12 <td> 13 <%= w.select :worktype, Work.worktypes.keys.map {|k| [k,k]} %> 14 </td> 15 </tr> 16 <% end %> 17 <% end %> 18 <%= f.submit "送信" %> 19 </table> 20 <% end %>
試したこと
hidden_fieldを用意し、jsで値を反映させる方法も考えましたが
もっと良さそうな方法があればご教示いただきたいです。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー