前提・実現したいこと
投稿内容を更新した時に、ターミナルでSystemStackError (stack level too deep):が発生してしまいます。
##発生している問題・エラーメッセージ
User Load (0.3ms) SELECT users
.* FROM users
WHERE users
.id
= 1 ORDER BY users
.id
ASC LIMIT 1
Enterprise Load (0.3ms) SELECT enterprises
.* FROM enterprises
WHERE enterprises
.id
= 11 LIMIT 1
↳ app/controllers/enterprises_controller.rb:46:in enterprise_return' (0.1ms) BEGIN ↳ app/controllers/enterprises_controller.rb:30:in
update'
User Load (0.2ms) SELECT users
.* FROM users
WHERE users
.id
= 1 LIMIT 1
↳ app/controllers/enterprises_controller.rb:30:in update' (0.2ms) ROLLBACK ↳ app/controllers/enterprises_controller.rb:30:in
update'
Completed 500 Internal Server Error in 755ms (ActiveRecord: 1.2ms | Allocations: 1471138)
SystemStackError (stack level too deep):
app/controllers/enterprises_controller.rb:30:in `update'
該当のソースコード
class EnterprisesController < ApplicationController
before_action :authenticate_user!
before_action :enterprise_return, only: [:show, :edit, :update, :destroy]
def index
@enterprises = Enterprise.includes(:user).order(industry_id: :desc)
end
def new
@enterprise = Enterprise.new
end
def create
@enterprise = Enterprise.new(enterprise_params)
if @enterprise.save
redirect_to root_path
else
render :new
end
end
def show
end
def edit
end
def update
if @enterprise.update(enterprise_params) エラー該当箇所です
redirect_to root_path
else
render :edit
end
end
def destroy
@enterprise.destroy
redirect_to enterprises_path
end
private
def enterprise_return
@enterprise = Enterprise.find(params[:id])
unless user_signed_in? && current_user.id == @enterprise.user_id
redirect_to root_path
end
end
def enterprise_params
params.require(:enterprise).permit(:title, :text, :theme, :industry_id).merge(user_id: current_user.id)
end
end
enterprise.rb モデル
class Enterprise < ApplicationRecord
validate extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :user
belongs_to :industry
with_options presence: true do
validates :title
validates :text
validates :theme
end
validates :industry_id, numericality: { other_than: 0 }
edit.html.erb
<body class="back-image"> <%= form_with(model: @enterprise, local: true) do |f| %> <div class="enterprise-box"> 投稿 <%= f.collection_select(:industry_id, Industry.all, :id, :industry, {}, {class:"industry-select"}) %> <%= f.text_field :title, class:"title", placeholder:"企業名" %> <%= f.text_area :theme, class:"theme", placeholder:"選考段階・面接で聞かれたこと等々" %> <%= f.text_area :text, class:"text", placeholder:"選考での感想やアドバイス" %> <%= f.submit "変更" ,class:"btn" %> </div> <% end %> </body> end試したこと
調べていった結果どうやら引数を終了せずに再帰的に自分自身を呼び出すアプリケーションコードのスタックオーバーフローの最も一般的な原因:コードのループしてしまっているみたいです。またコントローラー内のどれかのメソッドを誤って読み込んでいる可能性もあると思っています。
宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー