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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

633閲覧

中間テーブルを作成したものの中間テーブルにデータが保存されない

jones

総合スコア36

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/09 05:12

編集2020/11/09 06:19

チャーター便を新規発注してビューに表示させるという機能を実装しようとしています。
このチャーター便に対して多くのユーザーがコメントを記載していくというものなので、
ユーザーとチャーターの関係は多対多と考え、中間テーブルを作成しました。
コントローラーに新規投稿の記述を行い、Sequel Proで確認したところ、チャーターテーブルには新規投稿のデータを保存することができましたが、チャーターとユーザーの中間テーブルには保存されませんでした。
下記のコードのどの部分に問題があるかを教えていただければなと思います。
私的にはコントローラーのprivate以降のメソッドに問題があると思っていますが、修正の方法がわかりません。
何卒よろしくお願いします。

Controller

1class ChartersController < ApplicationController 2 def index 3 @charters = Charter.all 4 end 5 def new 6 @charter = Charter.new 7 end 8 9 def create 10 @charter = Charter.create(charter_params) 11 if @charter.save 12 redirect_to root_path 13 else 14 render :new 15 end 16 end 17 18 19 private 20 def charter_params 21 params.require(:charter).permit(:departure, :arrive, :size, :delivery_date, :buy_price, :prefecture_id, :city, :charter_address, :build_name, :tell_number, user_ids: []) 22 end 23end

CharterUser

1class CharterUser < ApplicationRecord 2 belongs_to :user 3 belongs_to :charter 4end

User

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 # アソシエーション 7 has_many :charter_users 8 has_many :charters, through: :charter_users 9end

CharterUserMigration

1class CreateCharterUsers < ActiveRecord::Migration[6.0] 2 def change 3 create_table :charter_users do |t| 4 t.references :charter, foreign_key: true 5 t.references :user, foreign_key: true 6 t.timestamps 7 end 8 end 9end

html

1<%=form_with model: @charter_user, local: true do |f|%> 2 <div class='chat-room-form__field'> 3 <div class='chat-room-form__field--left'> 4 <%= f.label :出発地, class: 'chat-room-form__label'%> 5 </div> 6 <div class='chat-room-form__field--right'> 7 <%= f.text_field :departure, class: 'chat__room_name chat-room-form__input', placeholder: '出発地を入力してください'%> 8 </div> 9 </div> 10 <div class='chat-room-form__field'> 11 <div class='chat-room-form__field--left'> 12 <%= f.label :到着地, class: 'chat-room-form__label'%> 13 </div> 14 <div class='chat-room-form__field--right'> 15 <%= f.text_field :arrive, class: 'chat__room_name chat-room-form__input', placeholder: '到着地を入力してください'%> 16 </div> 17 </div> 18 <div class='chat-room-form__field'> 19 <div class='chat-room-form__field--left'> 20 <%= f.label :才数, class: 'chat-room-form__label'%> 21 </div> 22 <div class='chat-room-form__field--right'> 23 <%= f.text_field :size, class: 'chat__room_name chat-room-form__input', placeholder: '才数'%> 24 </div> 25 </div> 26 <div class='chat-room-form__field'> 27 <div class='chat-room-form__field--left'> 28 <%= f.label :到着希望日, class: 'chat-room-form__label'%> 29 </div> 30 <div class='chat-room-form__field--right'> 31 <%= f.text_field :delivery_date, class: 'chat__room_name chat-room-form__input', placeholder: '2020-01-01'%> 32 </div> 33 </div> 34 <div class='chat-room-form__field'> 35 <div class='chat-room-form__field--left'> 36 <%= f.label :希望価格, class: 'chat-room-form__label'%> 37 </div> 38 <div class='chat-room-form__field--right'> 39 <%= f.text_field :buy_price, class: 'chat__room_name chat-room-form__input', placeholder: '50000'%> 40 </div> 41 </div> 42 <div class='chat-room-form__field'> 43 <%# 都道府県をActiveHashにする %> 44 <div class='chat-room-form__field--left'> 45 <%= f.label :都道府県, class: 'chat-room-form__label'%> 46 </div> 47 <div class='chat-room-form__field--right'> 48 <%= f.text_field :prefecture_id, class: 'chat__room_name chat-room-form__input', placeholder: '東京都'%> 49 </div> 50 </div> 51 <div class='chat-room-form__field'> 52 <div class='chat-room-form__field--left'> 53 <%= f.label :市区町村, class: 'chat-room-form__label'%> 54 </div> 55 <div class='chat-room-form__field--right'> 56 <%= f.text_field :city, class: 'chat__room_name chat-room-form__input', placeholder: '千代田区'%> 57 </div> 58 </div> 59 <div class='chat-room-form__field'> 60 <div class='chat-room-form__field--left'> 61 <%= f.label :番地, class: 'chat-room-form__label'%> 62 </div> 63 <div class='chat-room-form__field--right'> 64 <%= f.text_field :charter_address, class: 'chat__room_name chat-room-form__input', placeholder: '1-1'%> 65 </div> 66 </div> 67 <div class='chat-room-form__field'> 68 <div class='chat-room-form__field--left'> 69 <%= f.label :建物名, class: 'chat-room-form__label'%> 70 </div> 71 <div class='chat-room-form__field--right'> 72 <%= f.text_field :build_name, class: 'chat__room_name chat-room-form__input', placeholder: '〇〇ビル〇〇'%> 73 </div> 74 </div> 75 <div class='chat-room-form__field'> 76 <div class='chat-room-form__field--left'> 77 <%= f.label :電話番号, class: 'chat-room-form__label'%> 78 </div> 79 <div class='chat-room-form__field--right'> 80 <%= f.text_field :tell_number, class: 'chat__room_name chat-room-form__input', placeholder: '09012345678'%> 81 </div> 82 </div>

試してみたこと

コントローラーの記述で
permit以降の記述を:user_id current_user.idに変えてみましたが改善しませんでした。

備考

rails _6.0.0_で作成
gem deviseをインストール

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

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

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

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

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

winterboum

2020/11/10 14:09

これでcharterがsaveされました? viewにある @charter_user って未定義(nil)ですよね?
guest

回答1

0

自己解決

そもそもの前提が違っていたようです。
この場合、新規投稿を行うのは一人のユーザーだけなので、ユーザーとチャーターの間に多対多の関係にはなりませんでした。
なので中間テーブルを削除して普通の1対多で作成し直しました。

投稿2020/11/11 07:12

jones

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問