2

データベースからのデータをこのようにto_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
#

前もって感謝します。

4

3 に答える 3

0

Railsは、リクエストのクエリパラメータに基づいてハッシュを作成します。

正しい形式でリクエストを送信すると、Railsパラメータハッシュに以下のデータが含まれます。

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
于 2012-04-18T12:53:10.577 に答える
0

試す :

jsongemをインストールします

data = JSON.parse(params[:data])
new_record = OrderItem.new(data[:order_items]) 
new_record.save
于 2012-04-18T12:54:59.857 に答える
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
于 2012-04-27T15:44:01.110 に答える