2013-04-18 4 views
0

이상한 문제 - 내 컨트롤러 중 하나에서 생성 작업이 속성을 저장하지 않음 - 아래 코드를 확인하십시오. 모든 행은 마지막 2 때까지 작동합니다. oauth_tokenoauth_expires_at이 저장되지 않습니다.컨트롤러가 속성을 저장하지 않음 (FB의 Oauth Token)

omniauth['credentials']['token'] ? provider = omniauth['credentials']['token'] : provider = ''

그것은 완벽하게 잘 작동 : 나는에 마지막 줄에 두 번째를 변경하면 속성이 등 재미있는 점은, 제대로라는 것을 확인했습니다. 실제 속성이 oauth_token이고 oauth_expires_at 인 경우 문제가있는 것으로 보입니다. 그런 다음 2 개의 새로운 더미 특성을 만들어서 거기에서 작동하는지 확인하려고 시도했습니다. oauth_token이 엉망인 뒤에 만들어진 속성과 같습니다. 마이그레이션 문제입니까? 어떤 아이디어? 이 방법으로 문제가있는 경우

def create 
    params[:authorization] ? authorization_route = params[:authorization] : authorization_route = 'no authorization (invalid callback)' 

    omniauth = request.env["omniauth.auth"] 
    if omniauth and params[:authorization] 
     if authorization_route == "facebook" 
       omniauth['extra']['raw_info']['email'] ? email = omniauth['extra']['raw_info']['email'] : email = '' 
       omniauth['extra']['raw_info']['name'] ? name = omniauth['extra']['raw_info']['name'] : name = '' 
       omniauth['extra']['raw_info']['id'] ? uid = omniauth['extra']['raw_info']['id'] : uid = '' 
       omniauth['provider'] ? provider = omniauth['provider'] : provider = '' 
       omniauth['credentials']['token'] ? oauth_token = omniauth['credentials']['token'] : oauth_token = '' 
       omniauth['credentials']['expires_at'] ? oauth_expires_at = Time.at(omniauth['credentials']['expires_at']) : oauth_expires_at = '' 
end 
    end 

답변

1

는 잘 모르겠지만, 난 당신이 원을 사용하는 방법은 (condition ? value : other_value) 구문은 비정형입니다. 당신이 attribute = value ? value : default을하려면이 옵션을 사용하고 있기 때문에 일반적으로, 당신은

def create 
    authorization_route = params[:authorization] ? params[:authorization] : 'no authorization (invalid callback)' 

    omniauth = request.env["omniauth.auth"] 
    if omniauth and params[:authorization] 
    if authorization_route == "facebook" 
     email = omniauth['extra']['raw_info']['email'] ? omniauth['extra']['raw_info']['email'] : '' 
     name = omniauth['extra']['raw_info']['name'] ? omniauth['extra']['raw_info']['name'] : '' 
     uid = omniauth['extra']['raw_info']['id'] ? omniauth['extra']['raw_info']['id'] : '' 
     provider = omniauth['provider'] ? omniauth['provider'] : '' 
     oauth_token = omniauth['credentials']['token'] ? omniauth['credentials']['token'] : '' 
     oauth_expires_at = omniauth['credentials']['expires_at'] ? Time.at(omniauth['credentials']['expires_at']) : '' 
    end 
    end 
    # ... 
end 

뭔가를 쓰기하지만 것입니다, 당신은 모든하지만 마지막 하나의 나 (||) 연산자를 사용하여 더욱를 단순화 할 수 있습니다 :

def create 
    authorization_route = params[:authorization] || 'no authorization (invalid callback)' 

    omniauth = request.env["omniauth.auth"] 
    if omniauth and params[:authorization] 
    if authorization_route == "facebook" 
     email = omniauth['extra']['raw_info']['email'] || '' 
     name = omniauth['extra']['raw_info']['name'] || '' 
     uid = omniauth['extra']['raw_info']['id'] || '' 
     provider = omniauth['provider'] || '' 
     oauth_token = omniauth['credentials']['token'] || '' 
     oauth_expires_at = omniauth['credentials']['expires_at'] ? Time.at(omniauth['credentials']['expires_at']) : '' 
    end 
    end 
    # ... 
end 

그러나 세 가지 방법 모두 작동하므로 omniauth['credentials']['token']이 올바른 해시 키가 아니거나 나중에 컨트롤러 또는 모델에서 oauth_tokenoauth_expires_at을 사용하여 수행하는 작업에 문제가 있습니다.

컨트롤러 및 사용자 모델의 더 많은 코드를 포함하도록 질문을 편집 할 수 있습니까?

가 완전히 내가 컨트롤러에 나중에 무엇을하고 있었는지 잊었 :

0

나는 문제가 실제로 무엇을 인정 당황 해요.

user.authorizations.build(:provider => provider, :uid => uid, :name => name, :email => email, :user_id => user.id) 

에 :

user.authorizations.build(:provider => provider, :uid => uid, :name => name, :email => email, :user_id => user.id, :oauth_token => oauth_token, :oauth_expires_at => oauth_expires_at) 

변경했다 ... 부주의 한 실수를 사랑
관련 문제