Ruby on rails 如何解析Rails中的嵌套JSON对象?

Ruby on rails 如何解析Rails中的嵌套JSON对象?,ruby-on-rails,ruby,json,asp.net-web-api,Ruby On Rails,Ruby,Json,Asp.net Web Api,我将以下JSON发送到Rails 4.1.0 Started POST "/orders.json" for 127.0.0.1 at 2015-08-11 15:19:34 +0200 Processing by OrdersController#create as JSON Parameters: {"order"=>{"name"=>"Jon", "surname"=>"Do", "line_items_attributes"=>[{"work_id"=>

我将以下JSON发送到Rails 4.1.0

Started POST "/orders.json" for 127.0.0.1 at 2015-08-11 15:19:34 +0200
Processing by OrdersController#create as JSON
  Parameters: {"order"=>{"name"=>"Jon", "surname"=>"Do", "line_items_attributes"=>[{"work_id"=>16, "quantity"=>1, "total_price"=>34.5}, {"work_id"=>12, "quantity"=>2, "total_price"=>40}]}}
Unpermitted parameters: line_items_attributes
但我得到了不允许的参数错误。我的订购型号:

class Order < ActiveRecord::Base
  belongs_to :user
  belongs_to :dispatch_method
  belongs_to :payment_method
  has_many :line_items, :dependent => :destroy
  accepts_nested_attributes_for :line_items 
end
类顺序:销毁
接受行项目的嵌套属性
结束
我的命令\u controller.rb

class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]
  def index
    @orders = Order.all
  end

  def show
  end

  def new
    @order = Order.new
  end

  def edit
  end

  def create
    @order = Order.create(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render action: 'show', status: :created, location: @order }
      else
        format.html { render action: 'new' }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @order.update(order_params)
        format.html { redirect_to @order, notice: 'Order was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

def destroy
    @order.destroy
    respond_to do |format|
      format.html { redirect_to orders_url }
      format.json { head :no_content }
    end
  end

  private
    def set_order
      @order = Order.find(params[:id])
    end
    def order_params
      params.require(:order).permit(:name, :surname, line_items_attributes: [:id, :work_id, :quantity, :total_price])
    end
end
class OrdersController

我可以创建和保存订单的新实例,但不能创建行项目的新实例。

您可以尝试重新定义
订单参数,如下所示:

def order_params
  json_params = ActionController::Parameters.new(JSON.parse(params[:order]))
  return json_params.require(:name, :surname).permit(line_items_attributes: [:id, :work_id, :quantity, :total_price])
end
如您所见,我正在解析
params[:order]
以避免解析完整的
params
var。您可能需要在此处添加另一个json级别,但我希望您能理解。

类似的内容

render :json => @booking, :include => [:paypal, 
                                       :boat_people,
                                       :boat => {:only => :name, :include => {:port => {:only => :name, :include => {:city => {:only => :name, :include => {:country => {:only => :name}}}}}, 
                                                :boat_model => {:only => :name, :include => {:boat_type => {:only => :name}}}}}]

越来越近了,但还没有完全实现。这是我这次遇到的错误:
TypeError(没有将ActionController::参数隐式转换为字符串):
多么尴尬!似乎我编辑了一个错误的文件。修复后,上述设置可正常工作。