railsでwebアプリケーションを作っています。f.hidden_fieldを使い、genreモデルのgenre_idのデータをitemモデルのgenre_idに送る機能を実装中にNoMethodErrorが出ました。エラー文の意味はわかるのですが、解決方法がわかりません。コードの確認やエラー文の確認を行ったのですが、怪しいところは見つかりませんでした。お忙しいとは思いますが、回答していただけるとありがたいです。よろしくお願いします。
仕様
・namespaceを使っており管理者とログイン者で画面を分けています。
・アソシエーションを使っており、genreモデルにitemモデルを関連付けています。
・ログイン機能にはdevisemを使っています。
routes.rb
Rails.application.routes.draw do devise_for :admins devise_for :customers namespace :public do resources :homes,only:[:index] end namespace :admin do get 'sign_in' => 'sessions#new' resources :items, only: [:create, :index, :show, :edit, :update, :destroy,:new] resources :genres, only: [:index, :create,:edit, :update] root 'homes#top' end root 'public/homes#top' end
new.html.erb
<div class="container"> <div class="row"> <div class="col"> <h1>商品新規登録</h1> <%= form_for (@item_new),url: admin_items_path do |f| %> <h4>商品画像</h4> <%= f.attachment_field :image %> <h4>商品名</h4> <%= f.text_field :shop_name,:placeholder=>"商品名" %> <h4>商品説明</h4> <%= f.text_area :caption,:placeholder=>"ここに説明文を記述します。" %> <% end %> <%= form_for (@item) do |f| %> <p>ジャンル</p> <%= hidden_field_tag :genre_id,@genre.genre_id %> <% end %> <%= form_for (@item_new),url: admin_items_path do |f| %> <p>税抜価格</p> <%= f.text_field :price,:placeholder=>"1000" %>円 <div class="field"> <%= f.check_box :is_active, {multiple: true}, "black", nil %>販売中 <%= f.check_box :is_active, {multiple: true}, "white", nil %>販売停止中 </div> <%= f.submit '新規登録' %> <% end %> </div> </div> </div>
items.contller.rb
lass Admin::ItemsController < ApplicationController def new @item_new = Item.new @item = Item.all @genre = Genre.find(@item.genre_id) end def index end def create end def show end def edit end def update end private def item_params params.require(:item).permit(:shop_name, :image, :caption, :genre_id, :price, :is_active,:item_id) end end
schema.rb
# ActiveRecord::Schema.define(version: 2021_03_21_094144) do create_table "addresses", force: :cascade do |t| t.integer "address_id" t.integer "customer_id" t.string "name" t.string "postal_code" t.string "address" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "admins", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.integer "admin_id" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_admins_on_email", unique: true t.index ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true end create_table "cart_items", force: :cascade do |t| t.integer "cart_item_id" t.integer "item_id" t.integer "customer_id" t.integer "amount" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "customers", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.string "last_name" t.string "first_name" t.string "last_name_kana" t.string "postal_code" t.string "address" t.string "telephone_number" t.integer "customer_id" t.boolean "is_deleted" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_customers_on_email", unique: true t.index ["reset_password_token"], name: "index_customers_on_reset_password_token", unique: true end create_table "genres", force: :cascade do |t| t.integer "genre_id" t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "items", force: :cascade do |t| t.integer "item_id" t.integer "genre_id" t.string "name" t.string "image_id" t.text "introduction" t.integer "price" t.boolean "is_active" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "order_details", force: :cascade do |t| t.integer "order_detail_id" t.integer "order_id" t.integer "item_id" t.integer "price" t.integer "amount" t.integer "making_status" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "orders", force: :cascade do |t| t.integer "order_id" t.integer "customer_id" t.string "postal_code" t.string "address" t.string "name" t.integer "shipping_cost" t.integer "total_payment" t.integer "payment_method" t.integer "status" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end
item.rb
class Item < ApplicationRecord attachment :image belongs_to :genre end
genre.rb
class Genre < ApplicationRecord has_many :items, dependent: :destroy end
試したこと
・コードの確認
・エラー文の確認
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー