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

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

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

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1955閲覧

ruby on rails uninitialized constantエラー

tomato185

総合スコア29

Ruby

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/23 13:12

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージのとおりです。ProductTagという中間モデルが存在しません。

has_many :product_tagsとなっているのに、存在するモデルがProductsTagとなっています。テーブル名を確認して正しい方に合わせてください。

投稿2020/10/24 00:31

編集2020/10/24 00:31
maisumakun

総合スコア145123

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

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

tomato185

2020/10/24 01:58

ご回答ありがとうございます。 そもそもmodelを作るときに命名規則に則らずに作成しており、 途中でそれに気づいて、テーブル名だけは変えたのですが、 モデルのファイル名と中有館モデルの名前を変更するのを失念しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問