2013-06-26 40 views
0

我正在將我的應用程序升級到最新的rails,並且一直在堆棧級別過深的錯誤。當我從我的模型發出ajax請求時,會發生此錯誤。以下是錯誤和相關的控制器/型號代碼:升級到Rails 3.2.0後堆棧級別過深3.2.0

錯誤

[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 

現在這個工作完全在軌3.0,但升級後會立即顯示錯誤。我試過升級到rails 3.2,但錯誤仍然存​​在。

紅寶石1.9.3p429

軌3.2.0

感謝您的幫助!

+1

根據sql被吐出,'LogEntry.cal_entry(@date,@ athlete.id).size'實際上正在執行。你可以包括整個控制器的方法嗎? –

+0

剛剛添加了整個方法。 – Graeme

+0

通過刪除代碼行似乎是'@workouts = @ log_entry.workouts.build'這是創建堆棧級別太深的錯誤,我的模型組織,所以每個log_entry有很多鍛鍊,爲什麼這會是一個問題? – Graeme

回答

1

看起來錯誤是由名爲「方法」的鍛鍊模型中的命名方法錯誤導致的(對於說明),我想這只是升級之前的問題。