0

アプリケーションを最新のレールにアップグレードする過程にあり、スタック レベルが深すぎるというエラーに悩まされています。このエラーは、モデルから ajax リクエストを行うと発生します。エラーと関連するコントローラー/モデル コードは次のとおりです。

エラー

[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1] Processing by CoachesController#new as */*
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1]   Parameters: {"date"=>"2013-06-11", "athlete_id"=>"2"}
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1]   User Load (24.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1]   User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1]    (0.2ms)  SELECT COUNT(*) FROM "log_entries" WHERE "log_entries"."athlete_id" = 2 AND (date == '2013-06-11')
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1] Completed 500 Internal Server Error in 60ms
[679c54ab63bbaad55d7a1bd1fd9246d7] [127.0.0.1] 
SystemStackError (stack level too deep):
  actionpack (3.2.0) lib/action_dispatch/middleware/reloader.rb:70

コントローラ

   def new
@athlete = User.find_by_id(params[:athlete_id])   #this is different in normal controller(non coach)
@date = Date.parse(params[:date])
if LogEntry.cal_entry(@date, @athlete.id).size == 0 #check to see if entry exists
  @log_entry = @athlete.log_entries.build
  @log_entry1 = @log_entry.clone
  @workouts = @log_entry.workouts.build
  planned_workouts = @workouts.planned_workouts.build
  n = 1
  1.times do #do not generate more than the zone 1 
    planned_workouts.planned_workout_times.build(:zone => n)
    n += 2
  end
  completed_workouts = @workouts.completed_workouts.build
  n = 1
  1.times do
    completed_workouts.workout_times.build(:zone => n)
    n += 2
  end

else                                                #use already existing LogEntry
  @log_entry1 = LogEntry.cal_entry(@date, @athlete.id).first
  @log_entry = @athlete.log_entries.build
  @log_entry = @log_entry1.clone
  @workouts = @log_entry1.workouts.build
  planned_workouts = @workouts.planned_workouts.build
  n = 1 
  1.times do
    planned_workouts.planned_workout_times.build(:zone => n)
    n += 2
  end
  completed_workouts = @workouts.completed_workouts.build
  n = 1
  1.times do
    completed_workouts.workout_times.build(:zone => n)
    n += 2
  end 
end

^^これは、.cal_entryモデル関数が呼び出されたときにエラーが発生するように見える場所です

モデル

  scope :log_entry_for_date, lambda { |date1| where('date == ?', date1)}
  scope :log_entry_for_athlete, lambda { |athlete_id| where(:athlete_id => athlete_id)}

  def self.cal_entry(date, athlete_id)
    log_entry_for_date(date).log_entry_for_athlete(athlete_id).includes({:workouts => {:completed_workouts => :workout_times}})
  end

これは Rails 3.0 で完全に機能しましたが、アップグレード直後にエラーが表示されます。Rails 3.2 にアップグレードしようとしましたが、まだエラーが発生します。

ルビー 1.9.3p429

レール3.2.0

助けてくれてありがとう!

4

1 に答える 1

1

このエラーは、ワークアウト モデルの "method" という名前の不適切な名前のメソッドが原因で発生したようです (説明用)。アップグレードするまで問題はなかったと思います。

于 2013-06-26T20:46:19.103 に答える