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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

0回答

903閲覧

Rails 複数テーブルのデータを一括保存したい

ikutyan46

総合スコア18

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/05/29 06:04

【実現したいこと】
1つの画面で、複数のテーブルを一括でDB(Postgres)に登録したいが、
1つのテーブルにしか登録されないので解決したいのですが、登録できない原因を考えても解決できなかったので、どのように実装したら解決できるのか、教えて頂けませんでしょうか。
(今後同じような質問を繰り返さないためにも、どのような思考過程を踏んだのかも合わせてご教示頂けますと幸いです)

【状況】
Rails:5.2.4.3
ruby:2.6.5
DB:postgres
Railsの学習から1ヶ月目(独学)

DB設計は下記の通り。
([]内には、今回DBに保存したいテーブルの属性を指す)

・Userテーブル(deviseでログイン機能実装)⇆Recordテーブル = [:training_date, :learning_point ]
※user_idで紐付け
・Recordテーブル ⇆ Outputテーブル = [:output_name]
・Recordテーブル ⇆ Practiceテーブル = [:practice_item, :practice_time]
・Recordテーブル ⇆ Taskテーブル = [:task_name]
※record_idで紐付け

schema.rb

ActiveRecord::Schema.define(version: 2020_05_25_064157) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "outputs", force: :cascade do |t| t.text "output_name" t.bigint "record_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["record_id"], name: "index_outputs_on_record_id" end create_table "practices", force: :cascade do |t| t.string "practice_item" t.integer "practice_time" t.bigint "record_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["record_id"], name: "index_practices_on_record_id" end create_table "records", force: :cascade do |t| t.string "user_id" t.text "learning_point" t.date "training_date" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "tasks", force: :cascade do |t| t.text "task_name" t.bigint "record_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["record_id"], name: "index_tasks_on_record_id" end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end add_foreign_key "outputs", "records" add_foreign_key "practices", "records" add_foreign_key "tasks", "records" end

routes.rb

Rails.application.routes.draw do devise_for :users root to: 'records#index' resources :records # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

Controller

class RecordsController < ApplicationController before_action :set_user def index @records = Record.all.order(created_at: 'desc') end def show @record = Record.find(params[:id]) end def new @record = Record.new output = @record.outputs.build practice = @record.practices.build task = @record.tasks.build end def create @record = Record.new(record_params) output = @record.outputs.build practice = @record.practices.build task = @record.tasks.build if @record.save redirect_to records_url, notice: "練習内容の登録が完了しました。" else flash[:alert] = "登録に失敗しました。" render :new end end def edit @records = Record.all end

index.htmnl.slim
※デザインはまだ実装していないです

h1 練習記録一覧 .container .row .col-sm-6 .form-group #datetimepicker4.input-group.date[data-target-input="nearest"] input.form-control.datetimepicker-input[type="text" data-target="#datetimepicker4"] .input-group-append[data-target="#datetimepicker4" data-toggle="datetimepicker"] .input-group-text i.fa.fa-calendar script[type="text/javascript"] | $(function () { $('#datetimepicker4').datetimepicker({ format: 'L' }); }); .d-flex .col-4.text-align: center = link_to '新規登録', new_record_path, class: 'btn btn-primary' .col-4.text-align: center = link_to 'リマインダー設定', new_record_path, class: 'btn btn-primary' .col-4.text-align: center = link_to 'レポートを見る', new_record_path, class: 'btn btn-primary' table thead tr th 練習日 tbody - @records.each do | record | tr td= link_to record.training_date, record td= link_to "編集", edit_record_path(record), class: 'btn btn-primary mr-3' td= link_to "削除", @record, method: :delete, data: { confirm: "本当に削除してもよろしいでしょうか?"}, class: 'btn btn-danger'

イメージ説明

以上です。
もし他に必要な内容があれば、開示しますので、何卒よろしくお願い致します。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問