查找具有 ID 以外的参数的模型



我正在使用带有强参数的 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的用户"

另外,有点相关:偶尔我会收到一个错误,说"找不到参数:用户"。

有什么建议吗?谢谢!

更改:

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

自:

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

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

用:

@user = User.where(provider_id: params[:provider_id]).take
如果您想

了解有关活动记录查询接口的更多信息,请查看 http://guides.rubyonrails.org/active_record_querying.html。

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

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

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

相关内容

  • 没有找到相关文章

最新更新