Hey,
I was thinking I’d have my controllers do double-duty: the same actions
handling json and html requests differentially. For this, it’s useful
that
Rails 3.2 automatic params hash conversion from json work (as described
herehttp://guides.rubyonrails.org/v3.2.13/action_controller_overview.html#json-xml-parametersin
the Rails docs). (I’m using ruby 1.9.2.) But it doesn’t, that is, it
seems I am required to decode the json params explicitly. Why?
Here’s an example of a post from my dev log…
Processing by MarketlessPriceRequestsController#create as JSON
Parameters: {“utf8”=>“✓”,
“price_request”=>"{"prices_are_public_to_pricemakers":false, …
Here’s params[:price_request] in the controller
{“prices_are_public_to_pricemakers”:false, …
But it looks like I need to decode the json explicity to get to the
accepted form…
{“prices_are_public_to_pricemakers”=>false, …
Can I configure my controllers to help me avoid the explicit decode
step?
Thanks,
G
On Saturday, July 6, 2013 9:14:09 PM UTC+1, G-money wrote:
Hey,
I was thinking I’d have my controllers do double-duty: the same actions
handling json and html requests differentially. For this, it’s useful that
Rails 3.2 automatic params hash conversion from json work (as described
herehttp://guides.rubyonrails.org/v3.2.13/action_controller_overview.html#json-xml-parametersin
the Rails docs). (I’m using ruby 1.9.2.) But it doesn’t, that is, it
seems I am required to decode the json params explicitly. Why?
Is the thing making the requests setting the content type to
application/json ?
Fred
On Saturday, 6 July 2013 13:14:09 UTC-7, G-money wrote:
But it looks like I need to decode the json explicity to get to the
accepted form…
{“prices_are_public_to_pricemakers”=>false, …
Can I configure my controllers to help me avoid the explicit decode step?
+1 to Fred’s suggestion: make sure the parameters are being sent as
application/json.
I’d also recommend double-checking the code that is sending the data -
what
you’re getting looks like what would result if you did something like
this:
(in Rails)
render :json => { :price_request => @price_request.to_json }
(in JS)
$.post(’/some_url’, { price_request: JSON.generate(some_data_object) })
In both cases, there’s two conversions to JSON going on - one explicit,
then the other implicit in the transmission (either the render or the
post).
–Matt J.