查找除ID以外的参数模型

时间:2014-03-01 19:31:20

标签: ruby-on-rails ruby ruby-on-rails-4 active-directory strong-parameters

我正在使用具有强参数的Rails 4来尝试通过名为“provider_id”的参数查找用户。 我希望能够使用我的API调用以下URL:

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”。

有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:1)

find方法将使用id列搜索对象。使用where方法按其他标准/列进行搜索

使用:

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

如果您想了解有关活动记录查询界面的更多信息,请查看http://guides.rubyonrails.org/active_record_querying.html

答案 1 :(得分:1)

变化:

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

要:

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

答案 2 :(得分:1)

这是使用find_by!的完美示例(请注意!)。

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

它的工作方式与find_by类似,并返回一个User。但是如果找不到用户则会引发ActiveRecord::RecordNotFound错误。该异常由Rails自动处理,并变为404错误页面。