2013-02-05 7 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' 

현재 나는 오류 사용자 컨트롤러 다음 find -method가하는 반면

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가 nil이기 때문에 마이크로 포스트의 정의에 실패 함 – Jaqx

+1

해당 ID를 가진 사용자가 데이터베이스에 있는지 확인하십시오. –

답변

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이 정수가되면 ID별로 자동으로 찾습니다.

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

이 ID를 가진 사용자가 없으면 RecordNotFound가 throw됩니다. 결과적으로 404.

편집 : 업데이트 된 코드를 본 후 문제가 current_user 도우미 메서드에 있고 User.find가 아닌 것 같습니다.

+0

감사합니다. 여전히 같은 오류 – Jaqx

+0

이 경우 사용자 # find 메소드가 무시됩니다. 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

사용자가 nil 인 경우 말하지 않습니까? 그럼 아마 어딘가에이 라인이 필요합니다 – Jaqx

+0

만약 사용자가 nil 다음 그의 microposts 당신이 보여주고 싶어? – vijikumar

관련 문제