2014-08-29 48 views
0

我已經開始爲我的rails應用程序創建一個Api。我目前創建會話控制器日誌。會話Api,undefined方法downcase

但由於某些原因,我得到這個錯誤

NoMethodError 
in Api::V1::SessionsController#create 

undefined method `downcase' for nil:NilClass; 

我不理解爲什麼會這樣。我也在我的傳統會話控制器中使用了downcase方法,而我沒有這個問題。

API控制器

module Api 
    module V1 
    class SessionsController < ApplicationController 
     skip_before_filter :verify_authenticity_token, 
         :if => Proc.new { |c| c.request.format == 'application/json' } 

     respond_to :json 

     def create 
     user = User.find_by_email(params[:session][:email].downcase) 
     if user && user.authenticate(params[:session][:password]) 
      sign_in user 
     end 
     render :status => 200, 
      :json => { :success => true, 
         :info => "Logged In Successfully", 
         :data => { } } 
     end 

    end 
    end 
end 

控制器

class SessionsController < ApplicationController 

    def create 
    user = User.find_by_email(params[:session][:email].downcase) ###THIS WORKS FINE 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_to publishers_path 
    end 
    end 

end 

ROUTES

# API Routes 

namespace :api, defaults: {format: 'json'} do 
    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do 
    resources :sessions, only: [:new, :create, :destroy] 
    end 
end 
+1

檢查你是否有任何時髦的白色空格後。 – BroiSatse 2014-08-29 22:24:51

+0

是的,我不,它的確很奇怪...... – 2014-08-29 22:28:17

+1

哦,你的編輯很需要。 'params [:session] [:email]'是零,所以這就是爲什麼你的失敗失敗。由於它是一個API,您應該確實在檢查以確保人們向您傳遞成功撥打電話所需的所有有效數據。 – JTG 2014-08-29 22:29:53

回答

1

的問題是,你的c黑金params[:session][:email]

但捲曲電話:

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST localhost:3000/api/sessions -d "{\"user\":{\"email\":\"[email protected]\",\"password\":\"secret\"}}" 

電子郵件仍將存儲在params[:user][:email]

此外,你應該檢查用戶傳遞這樣的說法對你的API,因爲你已經注意到它沒有它就會失敗。

user = User.find_by_email(params[:user][:email].downcase) if defined? params[:user][:email] 
+0

這個解決方案將我的路線改爲:用戶嗎? – 2014-08-29 23:23:45

+1

不,您的路由配置(您的應用程序如何響應'POST localhost:3000/api/sessions')與您的控制器對您的參數所做的不同(您的應用程序對「{\」user \「的反應如何:{\ 「電子郵件\」:\ 「[email protected] \」,\ 「密碼\」:\ 「祕密\」}}「') – JTG 2014-08-30 01:09:02