2015-06-22 5 views
1

Я создаю заказ API в рельсах 4. Когда я создаю заказ в своем действии на создание, я не мог понять эту ошибку ниже.отсутствует или значение пуст:

Started POST "/api/v1/orders?access_token=testing" for 127.0.0.1 at 2015-06-22 12:23:55 +0530 
Processing by Api::V1::OrdersController#create as JSON 
    Parameters: {"access_token"=>"testing"} 
    ApiKey Load (1.0ms) SELECT `api_keys`.* FROM `api_keys` WHERE `api_keys`.`access_token` = 'testing' LIMIT 1 
    Restaurant Load (0.3ms) SELECT `restaurants`.* FROM `restaurants` WHERE `restaurants`.`id` IS NULL LIMIT 1 


ActionController::ParameterMissing - param is missing or the value is empty: order: 

Мой код контроллера:

Orders_controller.rb

class Api::V1::OrdersController < Api::V1::ApplicationController 
protect_from_forgery with: :null_session 

skip_before_filter :verify_authenticity_token, :if => Proc.new {|c| c.request.format.json? } 
before_action :fetch_restaurent 
before_action :fetch_food_items, :only => [:index] 

after_action :send_order_to_kitchen, :only => [:create, :update] 


    def app_sync 
    end 

    def index 
    @orders = Restaurant.orders.fetch_items_from_ethor 
    end 

    def show 
    # Display the list of food_items available from the restaurant 
    # Allow the customer to place an order 
    end 

    def create 
     @order = Order.build(order_params) 
     if @order.save 
      render :json, order, status:201, location: [:api, current_customer, order] 
     else 
      render :json, { errors: order.errors }, status:422 
     end 
    end 

    # once the order is placed just send it to the kitechn() 
    def update 
    @order = Order.find_by(params[:id]) 
    @rder.update_attributes(order_params) 
    if @order.save 
     render :json, order, status: 201, location: [:api, current_user.order.id] 
    else 
     render :json,{errors: order.errors}, status: 422 
    end 
    end 



private 
    def order_params 
    params.require(:order).permit(:customer_id, :order_id, :pos_id, :table_id, :order_number, 
      :order_status,:order_date, :subtotal, :final_total, :order_type, :food_item_ids => []) 
    end 
end 

Я не уверен, что я делаю неправильно. Пожалуйста, помогите мне.

+0

Как вы делаете запрос на создание «заказа»? –

+0

G.B. Я тестирую это, используя почтальон. – user5035102

+0

Вы также можете добавить снимок экрана этого запроса? –

ответ

0

В вашем методе создания используется @order = Order.build(order_params)

И в методе order_params вы ждете, чтобы иметь что-то вроде следующих { "порядок" => {customer_id => 1234, order_id => 10034} .....}

Ваш запрос почтальона должен быть изменен, чтобы иметь необходимые параметры с ключом заказа.

+0

Результат такой же, даже после того, как я обновил свой URL-адрес почтальона, как показано ниже. «http: // localhost: 3000/api/v1/orders? Access_token = testing & custmer_id = 1 & order_number = 101 ' – user5035102

+0

Пожалуйста, попробуйте что-то вроде этого заказа [customer_id] и т. Д., Вам нужно передать необходимые поля, что вы здесь требуете params.require (: order) .permit (: customer_id,: order_id,: pos_id,: table_id,: order_number, : order_status,: order_date,: subtotal,: final_total,: order_type,: food_item_ids => []) – Shani

+0

Пожалуйста, будьте ясны. Как что? – user5035102

0

Ваш PARAMS должен быть, как этот

{"access_token" => "testing", "order" => {"customer_id" => 1, "order_id" => 2, ..} } 

Кроме того, почему существует => [] в конце order_params метода. Это должно быть просто

def order_params 
    params.require(:order).permit(:customer_id, :order_id, :pos_id, :table_id, :order_number, 
     :order_status,:order_date, :subtotal, :final_total, :order_type, :food_item_ids) 
end 
+0

В моих 'order_params' Я передаю массив 'food_items => []' ': food_item_ids' - Он содержит список food_items в разовом порядке – user5035102

+0

Но '=> []' не требуется, какой бы тип данных он не содержал –

+0

В моем заказе модели -> has_many -> food_items (который является массивом) Так не следует ли отправлять его в виде массива? – user5035102

0

Как видно из ActionController::Parametersdocumentation, когда вы отмечаете :order как обязательный параметр он должен быть там. В противном случае будет сброшена ошибка ActionController:ParameterMissing. Все, что вам нужно сделать, это убедиться, что вы отправили :order с вашим запросом или просмотрите ваши требования в методе order_params.