1

我使用帶有強參數的Rails 4嘗試通過名爲「provider_id」的參數來查找用戶。 希望的是,我就可以讓我的API調用一個網址,如:查找ID爲非參數的模型

url.com/api/v1/user?provider=facebook?provider_id=12345

我的路線如下:的routes.rb

namespace :api do 
    namespace :v1 do 
     resources :users 
     match '/:provider/:provider_id', to: 'users#find_by_provider', via: 'get' 
    end 
end 

我堅強的參數是:

def user_params 
    params.require(:user).permit(:name, :age, :location, :provider, :provider_id) if params[:user] 
end 

我的功能是:

def find_by_provider 
    @user = User.find(params[:provider_id]) 

    respond_to do |format| 
     format.json { render json: @user } 
    end 
end 

目前,我與測試: url.com/api/v1/facebook/12345 和它返回:

"{"provider"=>"facebook", 
"provider_id"=>"12345"}" 

這是很好的!但我現在得到的錯誤:「找不到用戶id = 12345」

此外,有點相關:偶爾我會收到一個錯誤,說「param not found:user」。

有什麼建議嗎?謝謝!

回答

1

變化:

@user = User.find(params[:provider_id]) 

要:

@user = User.find_by(:provider_id => params[:provider_id]) 
+0

這和盧克的回答有什麼不同? – eightonrose

+1

@eightonrose這將返回您正在查詢的單個Activerecord對象,而Luke的答案返回一個關係對象,這就是爲什麼他需要調用'take'來從關係中檢索第一個項目 – bjhaid

+0

比這更快嗎? – Luke

1

這是一個完美的例子,其中使用find_by!(注意!)。

@user = User.find_by!(:provider_id => params[:provider_id]) 

它就像find_by,並返回一個User。但是如果找不到用戶,則會引發ActiveRecord::RecordNotFound錯誤。該異常由Rails自動處理,並轉換爲404錯誤頁面。