前提・実現したいこと
Railsでカテゴリー機能を作っています。
collection_selectでデータベースの内容を反映したセレクトボックスを再現したいのですが、入力画面で選択した内容が弾かれてしまい値を受け取ることができません。
発生している問題・エラーメッセージ
エラーメッセージ Started POST "/exhibition" for 220.147.151.254 at 2020-03-28 19:33:33 +0000 Cannot render console from 220.147.151.254! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by ProductsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"XjdU3fpzKPyJw3Vt0vNfh4xA4Zh3tb89+cEl9LXpqdGWO6p4ii/5dcfqeUPeJ4kxHnLJ6I+80wytwZKfIlhwJQ==", "product"=>{"name"=>"田中", "category_ids"=>"1", "content"=>"あいうえお", "price"=>"1000"}, "commit"=>"出品する"} User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] **Unpermitted parameter: :category_ids** (0.1ms) begin transaction (0.0ms) rollback transaction
該当のソースコード(関連箇所のみ抜粋)
new.html.erb
<%= form_for @product, url: yield(:url) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label:category %> <%= f.collection_select :category_ids, Category.all, :id, :name, {:include_blank => true} %> <% end %>
products.controller.rb
class ProductsController < ApplicationController def create @product = current_user.products.build(product_params) if @product.save flash[:success] = "出品が完了しました!" redirect_to @product.user else render template: "products/new" end end private def product_params params.require(:product).permit(:name, :content, :price, category_ids: []) end end
product.rb
class Product < ApplicationRecord has_many :product_category_relations has_many :categories, through: :product_category_relations end
category.rb
class Category < ApplicationRecord has_many :product_category_relations has_many :products, through: :product_category_relations end
product_category_relation.rb
class ProductCategoryRelation < ApplicationRecord belongs_to :product, optional: true belongs_to :category, optional: true end
試したこと
セレクトボックス以外にもラジオボタンとチェックボックスも試してみたところ
チェックボックスだけは正常に動作しました。
<%= f.collection_check_boxes(:category_ids, Category.all, :id, :name) do |b| %> <%= b.label {b.check_box + b.text} %> <% end %>
デベロッパーツールで確認したところ
セレクトボックスとラジオボタンの場合は
name="product[category_ids]"
でしたが、
チェックボックスだけは
name="product[category_ids][]"
と配列で受け取れる状態になっていました。
補足情報(FW/ツールのバージョンなど)
Ruby 2.6.3
Rails 5.1.6
正直いくら調べても原因がサッパリわからず、完全にお手上げ状態です・・・
初めての投稿で情報が不足している箇所などがあるかもしれませんがよろしくお願いします。
あなたの回答
tips
プレビュー