前提・実現したいこと
Ruby on rails 初心者です。
現在、ECサイトの構築を行っており、つまずいたのはDBへの登録処理です。
一度にネスト化された画像(複数)と中間テーブルを用いた配列の登録を実現しようと思っております。
発生している問題・エラーメッセージ
NameError in ProductsController#create uninitialized constant Product::ProductTag # 商品登録 def create @product_resister = Product.new(product_tag_image_params) ★赤線(エラー箇所) if @product_resister.save flash[:success] = "商品の登録が完了しました。" redirect_to products_path
商品がテーブルに登録されない。
ログを見ると、しっかりと配列で送られているところまでは実装できましたが、
テーブルにsaveする時(もしくはその一個手前)にSQL文が発行されないのではないかと考えております。
該当のソースコード
(views/products/new.html.erb)一部記載 ここで登録したい商品の情報を記入(下記はタグを複数選択可) <%= form_for @product_resister, html: {class: "new_product"} do |f| %> <%= f.label :tag, "タグ", class:"form_field" %> <%= collection_check_boxes(:product, :tag_ids, Tag.all, :id, :name) do |tag| %> <%= tag.label do %> <%= tag.check_box %> <%= tag.text %> <% end %> <% end %> <%= f.submit "登録", class:"resister_btn"%> <% end %>
(controllers/products_controller.rb)★一部記載 ストロングパラメータを用いてネスト化した画像と選択されたタグ(複数可)を配列で保存しようとしてます。 # 商品登録ページ def new @product_resister = Product.new @image = @product_resister.images.build end # 商品登録 def create @product_resister = Product.new(product_tag_image_params) if @product_resister.save flash[:success] = "商品の登録が完了しました。" redirect_to products_path else flash[:danger] = "商品の登録ができませんでした。お手数ですが、もう一度登録しなおしてください。" render "new" end end private def product_tag_image_params params.require(:product).permit(:name, :price, :count, :category, :content, :comment, images_attributes: [ :id, :img1, :img2, :img3, :img4, :img5 ], tag_ids: [] ) end
(models/tag.rb) class Tag < ApplicationRecord has_many :products, through: :product_tags has_many :product_tags end
(models/products_tag.rb) class ProductsTag < ApplicationRecord belongs_to :product belongs_to :tag end
(models/order.rb)※一部記載 class Product < ApplicationRecord has_many :images, dependent: :destroy accepts_nested_attributes_for :images has_many :tags, through: :product_tags has_many :product_tags accepts_nested_attributes_for :tags, allow_destroy: true end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/24 01:58