前提・実現したいこと
Railsで初めて業務管理のアプリを開発中です。
お客様から入力してもらうアンケート画面で、アンケートの質問と、その回答をチェックボタンで選んでもらい、確認画面を経由して登録してもらおうとしています。
確認画面に進むことはできるのですが、DBに保存するタイミングで、Unpermitted parameterに引っかかり保存ができておりません。
発生している問題・エラーメッセージ
Started POST "/customers" for 127.0.0.1 at 2018-07-14 22:16:22 +0900 Processing by CustomersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"h/vxrXYzVsFRu1hWWlQuSK06hij4ovBOHUHuVjtceCkydkEVgtNXprN8UeBdMcNJHP6dyjwS8dvV/93HO2uIAg==", "customer"=>{"answer_ids"=>"3 6 11 18 19"}, "commit"=>"送信"} Unpermitted parameter: :answer_ids
該当のソースコード
Ruby
1#モデル 2 3class Question < ApplicationRecord 4 has_many :answers 5end 6 7class Answer < ApplicationRecord 8 has_and_belongs_to_many :customers 9 belongs_to :question 10end 11 12class Customer < ApplicationRecord 13 has_and_belongs_to_many :answers 14end 15 16#中間テーブル 17class CreateAnswersCustomers < ActiveRecord::Migration[5.1] 18 def change 19 create_table :answers_customers, id:false do |t| 20 t.references :answer, index: true, null: false 21 t.references :customer, index: true, null: false 22 end 23 end 24end 25 26#コントローラ 27class CustomersController < ApplicationController 28 before_action :load_customer, only: [:create, :confirm] 29 30 def new 31 @customer = Customer.new 32 @question = Question.all 33 end 34 35 def confirm 36 render :new unless @customer.valid? 37 end 38 39 SUBMIT_BUTTON = '送信' 40 41 def create 42 if submit_clicked? 43 @customer.save 44 render plain: '保存しました' 45 else 46 render 'new' 47 end 48 end 49 50 private 51 52 def load_customer 53 @customer = Customer.new(customer_params) 54 @question = Question.all 55 end 56 57 def submit_clicked? 58 params[:commit] == SUBMIT_BUTTON 59 end 60 61 def customer_params 62 params.require(:customer).permit(answer_ids:[]) 63 end 64end
#new.erb <h1>お客様情報登録</h1> <%= form_for @customer, url: { action: :confirm } do |f| %> <%= render 'shared/error_messages' %> <% @question.each do |q| %> <%= q.question %> <%= f.collection_check_boxes(:answer_ids, q.answers, :id, :answer) %> <% end %> <%= f.submit "確定", class: "btn btn-primary" %> <% end %> </div> </div> #confirm.erb <%= form_for @customer do |f| %> <%= f.hidden_field :answer_ids %> <%= f.submit "送信" %> <%= f.submit "戻る" %> <% end %>
補足情報(FW/ツールのバージョンなど)
Rails 5.1.5
ruby 2.4.2p198
あなたの回答
tips
プレビュー