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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2231閲覧

【Rails】一括登録フォームの実装

yastinbieber

総合スコア49

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/02 03:19

編集2020/08/02 03:20

前提・実現したいこと

Railsにて一括登録フォームの実装を試みています。
indexactionからnewactionへ遷移するまでは実装できたのですが、送信後にエラーが起きてしまっており解決策がわからないためご質問させていただきます。

本文下記に添付しておりますサイトを見まねで実装しました。
そのため内容理解が薄いですが、どなたか解決策をご教示いただけますと幸いです。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

##workoutdiaries_controller class WorkoutdiariesController < ApplicationController before_action :move_to_index, except: :index  def new @form = Form::WorkoutdiaryCollection.new end def create @form = Form::WorkoutdiaryCollection.new(workoutdiary_collection_params) if @form.save redirect_to workoutdiaries_path else render :new end end private def move_to_index redirect_to action: :index unless user_signed_in? end def workoutdiary_search_params params.fetch(:search, {}).permit(:menu, :date_from, :date_to, :workoutdate_id) end def workoutdiary_collection_params params .require(:form_workoutdiary_collection) .permit(workoutdiaries_attributes: Form::Workoutdiary::REGISTRABLE_ATTRIBUTES) end end
## models/workoutdiary.rb class Workoutdiary < ApplicationRecord # validates :settype, :weight, :reps, presence: true belongs_to :user validates :user_id, presence: true belongs_to :workoutdate validates :workoutdate_id, presence: true scope :search, -> (search_params) do unless search_params.blank? workoutdate_id_is(search_params[:workoutdate_id]) .date_from(search_params[:date_from]) .date_to(search_params[:date_to]) else Workoutdiary.where(created_at: Date.current.all_day) end end scope :date_from, -> (from) { where('? <= created_at', from) if from.present? } scope :date_to, -> (to) { where('created_at <= ?', to) if to.present? } scope :workoutdate_id_is, -> (workoutdate_id) { where(workoutdate_id: workoutdate_id) if workoutdate_id.present? } end
## models/form/workoutdiary.rb class Form::Workoutdiary < Workoutdiary REGISTRABLE_ATTRIBUTES = %i(workoutdate_id settype weight reps weightsecond repssecond weightthird repsthird) attr_accessor :workoutdate_id end
## models/base.rb class Form::Base include ActiveModel::Model include ActiveModel::Callbacks include ActiveModel::Validations include ActiveModel::Validations::Callbacks end
## models/form/workoutdiary_collection.rb class Form::WorkoutdiaryCollection < Form::Base DEFAULT_ITEM_COUNT = 5 attr_accessor :workoutdiaries def initialize(attributes = {}) super attributes self.workoutdiaries = DEFAULT_ITEM_COUNT.times.map { Form::Workoutdiary.new } unless workoutdiaries.present? end def workoutdiaries_attributes=(attributes) self.workoutdiaries = attributes.map do |_, workoutdiary_attributes| Form::Workoutdiary.new(workoutdiary_attributes).tap { |v| v.availability = false } end end def valid? valid_workoutdiaries = target_workoutdiaries.map(&:valid?).all? super && valid_workoutdiaries end def save return false unless valid? Workoutdiary.transaction { target_workoutdiaries.each(&:save!) } true end def target_workoutdiaries self.workoutdiaries.select { |v| value_to_boolean(v.register) } end end

試したこと

一括登録フォームの実装

【Rails 6】form_with用いて一括登録する

【Rails 5】モデルを一括登録する手順

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.3
ruvy 2.5.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

元記事では、レコードのavailabilityを設定するために行っているようですので
availabilityカラムが無いのならばtapおよびそれ以降不要かと思います。

投稿2020/08/02 04:32

編集2020/08/02 04:33
asm

総合スコア15147

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

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

yastinbieber

2020/08/03 01:32

ご回答ありがとうございます。 無事実装することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問