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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

416閲覧

レコード一括登録時に一部共通のものを登録したい。

rinaly

総合スコア1

Ruby on Rails 5

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/11/26 02:23

前提

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で値を反映させる方法も考えましたが
もっと良さそうな方法があればご教示いただきたいです。
どうぞよろしくお願いします。

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

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

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

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

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

winterboum

2022/11/26 14:33

(私は答えられないかもですが) エラーメッセージは全部載せてください。
rinaly

2022/12/02 01:37

エラーメッセージはこれで全部です。
guest

回答1

0

自己解決

事前に社員選択のみのフォームを作り、一括入力フォームにhidden_fieldで値をセットしたことで解決しました!

投稿2022/12/02 03:42

rinaly

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問