2013-12-07 83 views
0

我最終得到SystemStackError。SystemStackError - 當搜索用戶時,系統堆棧級別太深,用戶搜索

我已經從另一個項目中複製了這個,我做的很好,所以我正在努力解決它爲什麼不工作。

可疑代碼:

class ProfilesController < ApplicationController 
     before_filter :find_user 

     def show  
     if @user 
      render action: show 
     else 
      render file: 'public/404', status: 404, formats: [:html] 
     end 
     end 

     private 

     def find_user 
     @user = User.find_by_profile_name(params[:id]) 
     end 
    end 

和錯誤:

Started GET "/Benji" for 127.0.0.1 at 2013-12-07 18:23:57 +0000 
    ActiveRecord::SchemaMigration Load (0.5ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by ProfilesController#show as HTML 
    Parameters: {"id"=>"Benji"} 
    User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."profile_name" = 'Benji' LIMIT 1 
Completed 500 Internal Server Error in 111ms 

SystemStackError - stack level too deep: 
    actionpack (4.0.2) lib/action_dispatch/middleware/reloader.rb:70:in `' 

感謝

回答

1

應該

render action: "show" 

render action: show 

在您的代碼中,show是一個方法調用,它引用自身導致遞歸無限循環。

可以簡化你的代碼更

class ProfilesController < ApplicationController 
    before_filter :find_user 

    def show 
    end 

    private 

    def find_user 
    unless @user = User.find_by_profile_name(params[:id]) 
     render file: 'public/404', status: 404, formats: [:html] 
    end 
    end 
end 
+0

完美的作品!謝謝你的幫助。 – BeamJinn

0

我相信render問題肯定回答了這個問題。

另外值得注意的 - 在你的find_user過濾器之前,Rails的find_by_*方法,則需要通過調用模型的配置文件名稱屬性搜索。但是,您傳遞的方法是params[:id]。只是想確保這是正確的。

+0

是的,現在就開始工作吧。乾杯! – BeamJinn

相關問題