更新 Rails 4 中的 API 抛出参数缺失错误



我正在尝试学习和编写更新 API,并从小处着手,我在 API 中传递单个参数并尝试获取响应。

控制器 :

  module Api
     module V1
       class OrderApiController < ApiController
         def order_update
           response = Hash.new
           result = Hash.new
           @order = Order.find(params[:id])
           if @order.update_attributes(order_params)
             result['order_id'] = order.id
             response['result'] = result
             response.merge! ApiStatusList::OK
           else
             response.merge! ApiStatusList::INVALID_REQUEST
           end
           render :json => response
         end
         private
         def order_params
           params.require(:order).permit( :id)
         end
      end
    end
 end

routes.rb 中的 API 路由是:

  match 'mobile/order_update' =>'order_api#order_update'

我给出的网址链接是

  http://localhost:3000/api/v1/mobile/order_update?key=docket&id=1

但是,这会引发以下错误

 ActionController::ParameterMissing at /api/v1/mobile/order_update
              param is missing or the value is empty: order

我不知道我做错了什么。我是Rails和API生成的新手。请帮忙

这是

由order_params方法引起的,在该方法中,您需要order(期望顺序是嵌套哈希),而您没有嵌套它。

您可以采取的一种方法是访问:

http://localhost:3000/api/v1/mobile/order_update?key=docket&order[id]=1

另外,我看到您正在设置@order实例变量,但是在您的控制块( if @order.update_attributes ),您正在使用一个局部变量,这会给您带来另一个错误。

我建议您通过 Hartl 教程,因为您可以从那里学到很多东西

更新

根据评论中提到的新错误,我认为您应该访问:

http://localhost:3000/api/v1/mobile/order_update?order[key]=docket&id=1

这是假设您的订单表具有基于所设置参数的列key

此外,请将order_params更改为:

     private
     def order_params
       params.require(:order).permit( :key) #since you cannot update a primary key, but I guess you want to update the key column
     end

我使用的解决方案如下

在我的order_api_controller.rb 中,我改变了

def order_update
       response = Hash.new
       result = Hash.new
       @order = Order.find(params[:id])
       if @order.update_attributes(order_params)
         result['order_id'] = order.id
         response['result'] = result
         response.merge! ApiStatusList::OK
       else
         response.merge! ApiStatusList::INVALID_REQUEST
       end
       render :json => response
     end

并将其编辑为此

     def order_update
        response = Hash.new
        result = Hash.new
        debugger
        @order = Order.find(params[:order][:id]) # passed the order symbol into params
        if @order.update_attributes(order_params)
            result['order_id'] = @order.id # Modified local variable to instance variable as per oreoluwa's suggestion
            response['result'] = result
            response.merge! ApiStatusList::OK
        else
            response.merge! ApiStatusList::INVALID_REQUEST
        end
        render :json => response
    end

并使用网址

如下
   http://localhost:3000/api/v1/mobile/order_update?key=docket&order[id]=1

这似乎可以解决问题

相关内容

  • 没有找到相关文章

最新更新