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

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

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

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

Q&A

解決済

1回答

341閲覧

Rails5でStrong Parametersの設定がうまくいかないのでご教授お願いいたします。

hqxer88240

総合スコア4

Ruby on Rails

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

0グッド

0クリップ

投稿2020/02/27 12:51

Strong Parametersの設定がうまくいかないのでご教授お願いいたします。

rails5.0.7において、ユーザーが予約をするときに他のテーブル(documentテーブル)に含まれるデータを選択して、予約データを保存したい。createアクションが正しく作動せず、保存ができず困っています。

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

{"utf8"=>"✓", "authenticity_token"=>"iiHX/Md/K8KFpArwVOXsBPYCBWp5Bnda4Ezmr1CGslb1vuUZq6RzWs/FydLwGaisLXoDsrPd3RYTl/0XA2zAnA==", "reservation"=>{"receivedate"=>"20200226", "document_ids"=>["", "1"]}, "commit"=>"Save", "controller"=>"reservations", "action"=>"create", "user_id"=>"1"} permitted: false>

ビュー

.new-reservation =form_for [@user, @reservation] do |f| = f.text_field :receivedate, placeholder: "受け取り希望日を入力してください" = f.collection_check_boxes :document_ids, @documents, :id, :name = f.submit "Save"

モデル(reservation.rb)

class Reservation < ApplicationRecord belongs_to :user belongs_to :office has_many :documents validates :receivedate, presence: true end

モデル(document.rb)

class Document < ApplicationRecord has_many :office_documents has_many :offices, through: :office_documents belongs_to :reservation belongs_to :user end

ルーティング

Rails.application.routes.draw do devise_for :users root "reservations#index" resources :users, only: [:edit, :update] do resources :reservations, only: [:new, :create, :edit] end end

コントーラー

class ReservationsController < ApplicationController before_action :set_user, only:[:new, :create] def index end def new @reservation = Reservation.new @documents = Document.all end def create #binding.pry @reservation = Reservation.new(reservation_params) if @reservation.save redirect_to root_path, notice: '予約が完了しました' else render :index end end def edit end private def reservation_params params.require(:reservation).permit(:receivedate, document_ids: []).merge(user_id: current_user.id) end def set_user @user = User.find(params[:user_id]) end end

試したこと

・binding.pryでreservation_paramsの中身を確認したところ以下のようにストロングパラメータを設定したキーはtrueで返された。

{"receivedate"=>"20200226", "document_ids"=>["", "1"], "user_id"=>1} permitted: true>

・form_forの中身に以下を追加する前は正しく処理されていたので、正しく処理されていた時のビューとコントーラーに戻したが、正しく処理されなかった。その間にreservationモデルをrollbackして、office_idとreservation_idを追記してマイグレーションしたのが原因かと考えています。

= f.collection_check_boxes :document_ids, @documents, :id, :name

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

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

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

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

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

guest

回答1

0

自己解決

解決しました!お騒がせして申し訳ありません。

投稿2020/02/28 06:11

hqxer88240

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問