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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

2926閲覧

SystemStackError (stack level too deep):の解決

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/05/19 15:27

編集2021/05/20 04:01

前提・実現したいこと

投稿内容を更新した時に、ターミナルで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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2021/05/19 22:41

エラーメッセージで指摘されている「30行目」は、どの行ですか?
退会済みユーザー

退会済みユーザー

2021/05/20 03:37

if @enterprise.update(enterprise_params)の部分です
maisumakun

2021/05/20 03:54

モデルのバリデーションなどで無限ループが発生していたりはしませんか?
退会済みユーザー

退会済みユーザー

2021/05/20 04:08 編集

もしかあしたら、モデルのvalidate extend ActiveHash::Associations::ActiveRecordExtensionsにバリデーションがかかってこれが原因かなと思ってます。 本当にありがとうございます!!!
guest

回答1

0

ベストアンサー

モデルのバリデーションが原因で無限ループになっていました

投稿2021/05/20 04:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問