ruby - Strong params: How to process nested json code? -
i'm trying write update method processes json. json looks this:
{ "organization": { "id": 1, "nodes": [ { "id": 1, "title": "hello", "description": "my description." }, { "id": 101, "title": "fdhgh", "description": "my description." } ] } }
my update method follows:
def update organization = organization.find(params[:id]) nodes = params[:organization][:nodes] nodes.each |node| n = node.find(node[:id]) unless n.update_attributes(node_params) render json: organization, status: :failed end end render json: diagram, status: :ok end private def node_params params.require(:organization).permit(nodes: [:title, :description]) end
unfortunately, n.update_attributes(node_params)
generates:
unpermitted parameter: id unpermitted parameter: id unpermitted parameter: id (0.2ms) begin (0.3ms) rollback *** activerecord::unknownattributeerror exception: unknown attribute 'nodes' node.
does see i'm doing wrong , write update method?
on unless n.update_attributes(node_params)
line, you're trying update node n
nodes_params
, of nodes json minus ids:
{"nodes"=>[{"title"=>"hello", "description"=>"my description."}, {"title"=>"fdhgh", "description"=>"my description."}]}
you add :id
permitted node parameter, cut out nodes
assignment step, iterate on node_params
instead, , omit :id
when updating node n
. e.g.,
def update organization = organization.find(params[:id]) node_params.each |node| n = node.find(node[:id]) unless n.update_attributes(node.except(:id)) render json: organization, status: :failed end end render json: diagram, status: :ok end private def node_params params.require(:organization).permit(nodes: [:id, :title, :description]) end
Comments
Post a Comment