1

データベース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

しかし、同じテーブルのデータベースにデータを保存する方法。パラメータは

Parameters: {"guestOrder"=>"{\"GuestOrder\"{\"GuestOrderId\":1,
\"orderTime\":\"2012-04-25 18:28:30\",\"notes\":\"spicy\",\"userId\":14,\"tableId\":1,
\"batch\":[{\"items\":[{\"itemId\":1,\"quantity\":4,\"dishId\":1},
{\"itemId\":2,\"quantity\":4,\"dishId\":3},
{\"itemId\":3,\"quantity\":3,\"dishId\":6}],
\"placed\":\"2012-04-25 18:28:30\",\"batchId\":1}],
\"numberOfAdults\":1,\"numberOfChilderns\":3}}"} 

このようにパラメータ値を解析しました、

def guestOrder
    guest_order = JSON.parse(params["guestOrder"])
    # How to store the values from guest_order to database tables
end

    1.9.2p290 :002 > guestOrder = JSON.parse("{\"GuestOrder\"{\"GuestOrderId\":1,
\"orderTime\":\"2012-04-25 18:28:30\",\"notes\":\"spicy\",\"userId\":14,\"tableId\":1,
\"batch\":[{\"items\":[{\"itemId\":1,\"quantity\":4,\"dishId\":1},
{\"itemId\":2,\"quantity\":4,\"dishId\":3},
{\"itemId\":3,\"quantity\":3,\"dishId\":6}],
\"placed\":\"2012-04-25 18:28:30\",\"batchId\":1}],
\"numberOfAdults\":1,\"numberOfChilderns\":3}}")


 => {"GuestOrder"=>{"GuestOrderId"=>1, "orderTime"=>"2012-04-25 18:28:30", "notes"=>"spicy", 
"userId"=>14, "tableId"=>1, "batch"=>[{"items"=>[{"itemId"=>1, "quantity"=>4, "dishId"=>1}, 
{"itemId"=>2, "quantity"=>4, "dishId"=>3}, {"itemId"=>3, "quantity"=>3, "dishId"=>6}], 
"placed"=>"2012-04-25 18:28:30", "batchId"=>1}], "numberOfAdults"=>1, 
"numberOfChilderns"=>3}} 

ここで、guest_ordersには多くのorder_batchesがあり、order_batchesには多くのorder_itemsがあります

# == Schema Information
#
# Table name: guest_orders
#
#  GuestOrderId   :integer         not null, primary key
#  adults         :integer
#  children       :integer
#  orderTime      :datetime
#  tableId        :integer
#
# Table name: order_batches
#
#  batchId        :integer         not null, primary key
#  placed         :datetime
#  guest_order_id :integer
#
# Table name: order_items
#
#  itemId         :integer         not null, primary key
#  quantity       :integer
#  dishId         :integer
#  order_batch_id :integer
4

3 に答える 3

0

モデル内で列名を指定して「serialize」キーワードを使用して、jsonデータを保存します。

例:モデルでは、列名はjson_dataです

serialize :json_data

次に、コントローラーで次のように使用します。

@model_obj.json_data = {:company => { :name => "IBM", :place => "US" }, :employee => {:name => "Mohan", :address => "US"}}

次に、オブジェクトを保存します

于 2012-04-24T13:25:33.893 に答える
0

あなたは間違いなくaccept_nested_attributes_forActiveRecordメソッド を見る必要がありますhttp://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.htmlまたそれについてのRailscastsのクーポールがあります:http://railscasts.com/episodes?utf8 =%E2%9C%93&search = nested + forms

したがって、GuestOrderモデルには、次のようなsmthが必要です。

accepts_nested_attributes_for :order_batches

パラメータでは、order_batches属性を次のように個別のハッシュでラップする必要があります。

"order_batches_attributes" => {"0" => {"placed" => "false"}, "1" => {"placed" => "true"}}

また、属性が有効な場合、order_batchesは適切なGuestOrderIdを使用してdbに自動的に保存されます。

于 2012-04-24T13:28:40.163 に答える
0
  def guestOrder
    guest_order = JSON.parse(params["guestOrder"])["GuestOrder"]
    placed_at = Time.zone.parse(guest_order["orderTime"])
    @order = GuestOrder.new(placed: placed_at, guest_table_id: guest_order["tableId"], user_id: guest_order["userId"], 
            adults: guest_order["numberOfAdults"], children: guest_order["numberOfChilderns"], notes: guest_order["notes"])
    guest_order["batch"].each do |batch|
      placed = Time.zone.parse(batch["placed"])
      @batch = OrderBatch.new(placed: placed)
      batch["items"].each do |item| 
        @batch.order_items << OrderItem.new(dish_id: item["dishId"], quantity: item["quantity"]) 
      end 
      @batch.guest_order = @order
      @batch.save 
    end
    if @order.save 
      render json: @order.to_json(only: [:id], message: "success") 
    else 
      render json: @order.errors 
    end  
  end
于 2012-04-26T08:19:53.857 に答える