2013-05-18 23 views
3

我在Rails中發現了這個錯誤,並且沒有其他信息可以幫助我找出原因。在Rails中堆棧級別過深錯誤

SystemStackError in UserController#students 
stack level too deep 

我的用戶控制器如下

class UserController < ApplicationController 
    before_filter :authenticate_user!, :except => [:show, :students, :mentors] 
    ... 
    def students 
    @users = Student.where(:verify_code => 'VERIFIED') 
    end 
end 

即使當我刪除@users行的錯誤仍然存​​在。

編輯:錯誤似乎發生在除了devise_for :users和to_root之外的每一條路徑,這意味着只是用戶控制器。

用戶模型

require 'json' 
require 'socket' 

class User < ActiveRecord::Base 
    serialize :roles 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
    validates :ign, :server, :roles, :presence => true 
    validate :summoner_exists 
    validate :valid_roles 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :ign, :server, :tier, :roles, :type 


    def valid_roles 
    valid_role_array = ['Top', 'Mid', 'Jungle', 'AD Carry', 'Support'] 
    self.roles.each do |role| 
     unless valid_role_array.include?(role) 
     self.roles.delete(role) 
     end 
    end 
    end 

    def summoner_verified? 
    return self.verify_code == 'VERIFIED' 
    end 

    def summoner_verify 
    rune_pages = shurima_api(self.server, 'rune_pages', self.acctid) 
    unless rune_pages 
     return false 
    else 
     rune_pages.each do |page| 
     if (page['name'] == self.verify_code) 
      self.verify_code = 'VERIFIED' 
      self.save 
      return true 
     end 
     end 
    end 
    return false 
    end 

    def summoner_exists 
    json = shurima_api(self.server, 'summoner', self.ign) 
    unless json 
     errors.add(:ign, "The summoner name \"#{self.ign}\" doesn't exist on #{self.server}") 
    else 
     self.summonerid = json['summonerId'] 
     self.acctid = json['acctId'] 
     self.verify_code = Array.new(10){rand(36).to_s(36)}.join 
     eligible_to_mentor 
    end 
    end 

    def eligible_to_mentor 
    leagues = shurima_api(self.server, 'leagues', self.summonerid) 
    unless leagues 
     errors.add(:ign, "That summoner doesn't seem to meet the requirements to become a mentor. Make sure you're at least in a Platinum League") 
     return false 
    end 
    leagues.each do |league| 
     if (league['queue'] == 'RANKED_SOLO_5x5') 
     self.tier = league['tier'] 
     end 
    end 
    eligible_tiers = ['PLATINUM', 'DIAMOND', 'CHALLENGER'] 
    if (self.type == 'Mentor' && !eligible_tiers.include?(self.tier)) 
     errors.add(:mentor, "Mentors must be at least PLATINUM.") 
    end 
    end 

    def shurima_api(server, method, args) 
    host, port = 'ip removed', 714 
    TCPSocket.open(host, port) do |socket| 
     ready = IO.select([socket], [socket], nil, 8) 
     return false unless ready 
     socket.puts server + "&" + method + "&" + args.to_s 
     message = socket.gets.chomp 
     if message == '"Unknown error"' 
     return false 
     end 
     return JSON.parse(message) 
    end 
    end 
end 
+0

您是否正在執行視圖中的任何應用程序邏輯或可能導致錯誤的幫助程序? –

+2

你的'User'模型中是否有任何範圍?有些東西可能會導致遞歸循環。發佈模型代碼並嘗試使用'--trace'作爲任務運行查詢來查看方法鏈。 – Matt

+0

@Matt沒有範圍。我發佈了這個模型。我如何使用--trace運行它? – Anujan

回答

4

我最終通過重命名request方法request_mentor,因爲這是造成無限循環固定它。

+0

什麼請求方法,你從來沒有發佈過一個? – Matt

+0

@Matt,它在[User Controller]中(http://stackoverflow.com/questions/16630082/stack-level-too-deep-error-in-rails/16680382?noredirect=1#comment23992063_16630082) – Anujan

+0

.. 。你永遠不會(http://stackoverflow.com/posts/16630082/revisions)發佈。 – DMKE

相關問題