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

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

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

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

Q&A

解決済

1回答

419閲覧

一括登録をしたい(rails)

yamady

総合スコア176

Ruby on Rails

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

0グッド

1クリップ

投稿2018/10/23 08:33

編集2018/10/23 08:42

お世話になっております。

Ruby on Rails(5.2.1)でフォームから同じモデルを一括登録したいと考えています。
現在、ビューもコントローラーも3回ずつ回すようにしているのですが、それぞれきちんと保存されずに困っています。

追記
実現したいことは、入力した選択肢をそれぞれ保存したいと考えています。
例えば、「赤」、「青」、「緑」と入力すれば、3つレコードが追加されるようなイメージです。

エラーなどはありませんが、データベースには格納されていないという状態です。

app/controllers/selections_controller.rb

Ruby

1class SelectionsController < ApplicationController 2 def index 3 end 4 5 def new 6 @title = Title.find(params[:id]) 7 if user_signed_in? 8 @selection = Selection.new 9 else 10 flash[:alert] = "ログインしてください。" 11 redirect_to title_path(id: @title.id) 12 end 13 end 14 15 def create 16 3.times do 17 @selection = Selection.create(create_params) 18 end 19 if @selection.save 20 flash[:success] = "選択肢が追加されました!" 21 redirect_to new_selection_path(id: @selection.title_id) 22 else 23 flash[:alert] = "選択肢の追加に失敗しました。" 24 redirect_to new_selection_path(id: @selection.title_id) 25 end 26 end 27 def create_params 28 params.require(:selection).permit(:id, :name, :image, :title_id) 29 end 30end

app/views/selections/new.html.erb

Ruby

1<% provide(:title, @title.name + 'の選択肢追加') %> 2 <div class="main"> 3 <form> 4 <h2>選択肢を追加する</h2> 5 <%= form_for(@selection) do |f| %> 6 <%= 3.times do %> 7 <div class="selection-item"> 8 <%= f.hidden_field :title_id, value: @title.id %> 9 <div class="field"> 10 <label>選択肢</label> 11 <%= f.text_field :name, placeholder: "例)" %> 12 </div> 13 <div class="field"> 14 <label>選択肢の画像</label> 15 <%= f.file_field :image, :type => "file" %> 16 </div> 17 </div> 18 <% end %> 19 <div class="form-btn"> 20 <%= f.submit "選択肢を追加する" %> 21 </div> 22 <% end %> 23 </form> 24 </div> 25</div>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/23 08:38

やりたいことがよくわかりません。「同じ内容」を3回登録するってことですか?
yamady

2018/10/23 08:43

分かりづらい内容の投稿となってしまい申し訳ございません。今ほど、実現したいことを追記させていただきました。
guest

回答1

0

ベストアンサー

ruby

1{ 2 selection1: {title_id: 'hoge', name: 'huga', image: 'foo'}, 3 selection2: {title_id: 'hoge', name: 'huga', image: 'foo'}, 4 selection3: {title_id: 'hoge', name: 'huga', image: 'foo'} 5}

みたいにパラメータを3つ分用意して送信してcontrollerではそれぞれとり出して登録する感じですかね。
現状のコードでは同じ内容で3回createしようとしているので、
たとえ登録できたとしても同じものが3つってな感じになりそうです。
byebug等使って送られてきたパラメータを確認してみてください。

エラーなどはありませんが、データベースには格納されていないという状態です。

例外が出ているはずなのでcreate!メソッドを使えば出てくると思います。

投稿2018/10/23 08:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yamady

2018/10/24 02:07

ご回答いただきましてありがとうございます。 いただいた内容を参考に進めていきたいと思います。 fields_forを使うとできそうな気がしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問