kahoxx121u
@kahoxx121u (kaho)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

renderでデプロイ時に発生したNameErrorを解決したい

デプロイ時のNameErrorを解決したい

デプロイ時に以下のようなNameErrorが発生しました。activhashにてうまく読み込めていないと思われるので、categoryの記載している箇所を確認しましたが答えが見つかりません。解決方法をご教示ください。
categoryを記載した箇所は、モデル、マイグレーション、showとnewファイル、コントローラーのパラムスです。初歩的な質問で申し訳ございませんが、よろしくお願いいたします。

以下デプロイ時のrenderのエラー画面

! Unable to load application: NameError: uninitialized constant ActiveHash
Jan 31 01:14:37 AM  bundler: failed to load command: puma (/opt/render/project/.gems/bin/puma)
Jan 31 01:14:37 AM  /opt/render/project/src/app/models/category.rb:1:in `<main>': uninitialized constant ActiveHash (NameError)
opt/render/project/rubies/ruby-2.6.5/lib/ruby/2.6.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
from /opt/render/project/rubies/ruby-2.6.5/lib/ruby/site_ruby/2.6.0/bundler/friendly_errors.rb:120:in `with_friendly_errors'
class Category < ActiveHash::Base
  self.data = [
    { id: 1, category: '---' },
    { id: 2, category: 'メンズ' },
    { id: 3, category: 'レディース' },
    { id: 4, category: 'ベビー・キッズ' },
    { id: 5, category: 'インテリア・住まい・小物' },
    { id: 6, category: '本・音楽・ゲーム' },
    { id: 7, category: 'おもちゃ・ホビー・グッズ' },
    { id: 8, category: '家電・スマホ・カメラ' },
    { id: 9, category: 'スポーツ・レジャー' },
    { id: 10, category: 'ハンドメイド' },
    { id: 11, category: 'その他' },
  ]
  include ActiveHash::Associations
  has_many :items
  end
   <%# 商品の詳細 %>
    <div class="items-detail">
      <div class="weight-bold-text">商品の詳細</div>
      <div class="form">
        <div class="weight-bold-text">
          カテゴリー
          <span class="indispensable">必須</span>
        </div>
        <%= f.collection_select(:category_id, Category.all, :id, :category, {}, {class:"select-box", id:"item-category"}) %>
        <div class="weight-bold-text">
          商品の状態
          <span class="indispensable">必須</span>
        </div>
        <%= f.collection_select(:condition_id, Condition.all, :id, :condition, {}, {class:"select-box", id:"item-sales-status"}) %>
      </div>
    </div>
    <%# /商品の詳細 %>
<div class="item-explain-box">
      <span><%= @item.text %></span>
    </div>
    <table class="detail-table">
      <tbody>
        <tr>
          <th class="detail-item">出品者</th>
          <td class="detail-value"><%= @item.user.nickname %></td>
        </tr>
        <tr>
          <th class="detail-item">カテゴリー</th>
          <td class="detail-value"><%= @item.category.category %></td>
        </tr>
        <tr>
class ItemsController < ApplicationController
  before_action :authenticate_user!, except: [:index,:show]
  before_action :set_item, only: [:show, :edit, :update, :destroy]

  def index
    @items = Item.includes(:user).order("created_at DESC")
  end

  def new
    @item = Item.new
  end

  def create
    @item = Item.new(item_params)
    if @item.save
      redirect_to root_path
    else
      render :new
    end
  end

  def show
  end 

  def edit
    if current_user.id == @item.user_id && @item.order.nil?
    else
    redirect_to root_path
    end
  end

  def update 
      if @item.update(item_params)
      redirect_to item_path(item_params)
      else
      render :edit 
      end
  end

  def destroy
    if current_user.id == @item.user_id 
    @item.destroy
    redirect_to root_path
    else
    redirect_to root_path
    end
  end

  private 
  def item_params
    params.require(:item).permit(:item_name, :image, :price, :text, :category_id, :condition_id, :delivery_charge_id, :prefecture_id, :delivery_day_id
    ).merge(user_id: current_user.id)
  end

  def set_item
    @item = Item.find(params[:id])
  end

end
class CreateItems < ActiveRecord::Migration[6.0]
  def change
    create_table :items do |t|
      t.timestamps
      t.string  :item_name, null: false
      t.text    :text, null: false
      t.integer :category_id, null: false
      t.integer :condition_id, null: false
      t.integer :delivery_charge_id, null: false
      t.integer :prefecture_id, null: false
      t.integer :delivery_day_id, null: false
      t.integer :price, null: false
      t.references :user, null: false, foreign_key:true
    end
  end
end
0

1Answer

前提としてgemfileに以下の記述はありますか?

gemfile
gem 'active_hash'

なければ追記してbundle installを実行して再度試してみてください。

あってなおエラーになる場合、gemを再度入れ直す等を実施してみると直るかもしれないです。

1Like

Comments

  1. @kahoxx121u

    Questioner

    いつも回答いただいて本当に助かってますありがとうございます。そしてご教示いただきましたとおり、gemfileを再度見返しました。お恥ずかしながらこれまでgemfileの記載場所は特に気にせずに入力していて、今回はactive_hashがtestの箇所だけに記載していたことが原因ということがわかり、なんとか無事デプロイすることができました。ありがとうございます!

Your answer might help someone💌