2012-04-18 54 views
2

我試圖將數據從我的數據庫渲染到像這樣的to_json,它工作的很好。如何編寫一個方法來獲取JSON數據並解析並保存到數據庫中

def getOrderDetails 
    #To get the details of a particular guest_order and its batches and items 
    @guest_order = GuestOrder.find(params[:id]) 
    render json: @guest_order.to_json(except: [:created_at, :updated_at], 
      include: {order_batches: {except: [:guest_order_id, :created_at, :updated_at], 
      include: {order_items: {except: [:order_batch_id, :created_at, :updated_at] } } 
       } 
       } 
      ) 
    end 

但是,我不知道如何編寫一個方法來獲取json數據並解析它,然後更新到數據庫中。

如果我這樣從手機發送JSON數據,

Parameters:{"updateStatus" => "{\"itemId\":1,\"status\":\"accepted\",\"statusTime\":\"2012-04-25 18:28:30\",\"batchId\":5}"} 

下面地位是這些公認的一個,烹飪,準備,交付,取消。 statusTime是特定狀態的值。

我怎樣才能得到這些數據和分析,然後在數據庫

def updateStatus 

    # How to parse json and save in database 

end 

表架構是這樣的更新到下表,提前

# == Schema Information 
# 
# Table name: order_items 
# 
# id    :integer   not null, primary key 
# quantity  :integer 
# accepted  :datetime 
# cooking  :datetime 
# ready   :datetime 
# delivered  :datetime 
# cancelled  :datetime 
# order_batch_id :integer 
# dish_id  :integer 
# created_at  :datetime 
# updated_at  :datetime 
# 

感謝。

回答

0
def updateStatus 
    order = JSON.parse(params["updateStatus"]) 
    @item = OrderItem.where(order_batch_id: order["batchId"], item_id: order["itemId"]) 
    status = order["status"] 
    case status 
     when "cancelled" 
     @item.first.update_attributes(cancelled: order["statusTime"]) 
     when "accepted" 
     @item.first.update_attributes(accepted: order["statusTime"]) 
     when "cooking" 
     @item.first.update_attributes(cooking: order["statusTime"]) 
     when "ready" 
     @item.first.update_attributes(ready: order["statusTime"]) 
     when "delivered" 
     @item.first.update_attributes(delivered: order["statusTime"]) 
    end 
    render json: @item.to_json(except: [:created_at, :updated_at], message: "success") 
    end 
0

Rails將根據請求中的查詢參數創建一個哈希。

如果您以正確格式提供請求,Rails params哈希將包含以下數據。

puts params.inspect 
=> 
{ "order_items" => { "id" => 9, "cooking" => "2012-03-11 15:16:15.0000" }, :action => "action_name", etc } 

其實你根本不需要解析json。

def updateStatus 
    @order_item = OrderItem.create(params[:order_items]) 
    respond_to do |format| 
    format.json { render @order_item } 
    end 
end 
0

嘗試:

安裝JSON寶石

data = JSON.parse(params[:data]) 
new_record = OrderItem.new(data[:order_items]) 
new_record.save 
相關問題