2013-02-05 25 views
0

已解決:問題在沒有人登錄時調用控制器中的current_user,並且沒有當前用戶會引發錯誤,這要歸功於努力/時間。允許用戶#未登錄時顯示。remember_token IS NULL

我希望人們能夠在我的應用程序中查看個人資料頁面,而不管他們是否在我的網站上有帳戶。目前我得到的錯誤:

SQL:

Started GET "https://stackoverflow.com/users/1" for 127.0.0.1 at 2013-02-05 05:08:50 -0500 
Processing by UsersController#show as HTML 
Parameters: {"id"=>"1"} 
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", "1"]] 
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" IS NULL LIMIT 1 

NoMethodError (undefined method `microposts' for nil:NilClass): 
app/controllers/users_controller.rb:34:in `show' 

我認爲它試圖定義一記令牌時有不應該是一個人時,實際上並沒有在簽署

用戶控制器:

def show 
    @user = User.find_by_id(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page]) 
    @micropost = current_user.microposts.build 
End 
+0

錯誤在哪一行發生? –

+1

由於@user爲零,因此無法定義微博。 – Jaqx

+1

檢查具有該標識的用戶是否存在於數據庫中。 –

回答

0

問題是current_user是零,並且在沒有人登錄時在控制器中調用它。結果是它會引發錯誤。

我添加如果signed_in?在那些具有current_user的特定行旁邊,現在一切正常呈現。

def signed_in? 
    !current_user.nil? 
end 

def current_user 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
end 
0

find_by_foo效用不扔一個「記錄未找到的」誤差,而find - 方法一樣。當find獲得一個整數時,它將自動按Id查找。

def show 
    @user = User.find(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page]) 
    @micropost = current_user.microposts.build 
End 

如果沒有這個ID的用戶,這將拋出一個RecordNotFound;導致,在生產,在404。

編輯:在看到您的更新的代碼後,看起來你的問題在current_user幫手方法,而不是在User.find。

+0

很高興知道,謝謝。仍然是相同的錯誤 – Jaqx

+0

在這種情況下,最有可能您的用戶#查找方法被覆蓋。 params [:id]中的值是多少?並且如果你將其饋入控制檯會發生什麼情況:'irb> User.find(1337)'? – berkes

+0

它工作的用戶在那裏。似乎在其他地方的錯誤我剛剛發佈的SQL錯誤好像它與我的記憶令牌 – Jaqx

0

試試這個..

def show 
    @user = User.find(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page]) if [email protected]? 
    @micropost = current_user.microposts.build 
    End 

這將避免錯誤。

+0

不知道什麼爆炸做,但沒有相同的錯誤 – Jaqx

+0

這是說如果用戶是零?那麼我可能需要這個線 – Jaqx

+0

如果用戶是零,然後你想顯示其microposts? – vijikumar

相關問題