Ruby on Rails Saturday, July 25, 2015

Hi Fred (and All)!

Your question pointed me in the right direction.  The problem is that rails-api 4.0.9 and lower do not handle strong parameters alone or with any of the many solutions I found posted on the web. :'(

I setup a clean rvm gemset, installed rails 4.2.3 and rails-api 4.2.3.  I used ruby 2.2.2 and rails-api 4.2.3 (the latest and greatest releases) to create a test app without my old gems.

The test app responded to the ember SPA and Google Chrome Postman perfectly 8-) .  Now I have to see about upgrading or working around the old gems so I can use rails 4.2.3. :-(

For anyone who might be wondering,  I have not tested rails-api with versions greater than 4.0.9 and less than 4.2.3 so I don't know exactly where the breakage occurred.

I owe, I owe, so off to work I go :-D .

Thanks,

Don

On 07/25/2015 02:37 PM, Donald Ziesig wrote:
On 07/25/2015 01:21 PM, Frederick Cheung wrote:


On Saturday, July 25, 2015 at 5:46:47 PM UTC+1, donz wrote:
Do you know why the payload is a string rather than a hash ?What format is the data being posted in (form data,json, xml etc ?) It seems to me that your first problem is to solve this - even if you were to solve the strong parameters bit presumably your code is expecting params[:user] to be a hash

Fred

The payload is a string because the app was generated using rails-api new myapp rather than rails new myapp.  I am using rails-api because I am doing all interactions with the rails app in json.  Using rails-api eliminates all of the rendering code and keeps heroku happier from a memory usage point of view.

When I generate the exact same app using just plain rails new myapp it responds correctly to the incoming json with its own json results.  In other words, params(:user) returns an object which responds to the permits method with rails but the same code returns a string with rails-api, raising the NoMethod exception.

I have found many "solutions" to this on the web (so I am not the first to encounter it), but for some reason none of them work for me.  The explanation below gives more technical details  (this one came from StackOverflow):


 
I still think you have a more fundamental problem. With or without strong_parameters, params[:user] should be a hash (and the rails-api gem looks like it loads strong parameters for you anyway). How are you making your post requests to your app?

Fred

Hi Fred,

I am using two sources for the requests.  The eventual production source is a Single Page App I am writing in ember.js.  The testing source is Google Chrome's Postmaster which gives me total control over what is sent.  Both send json posts. When I am running a plain rails app both work exactly as expected.  When I am running rails-api, both fail in exactly the same way.

For additional background, the new app is a replacement for an existing rails app that works well on high speed internet links, but is difficult to use on (relatively) slow internet links such as 4G cellular due to too many round trips to the server with too much data coming back for each rendering, even after much optimization. :-(

Also, as I mentioned before, because of some old gems I am limited to using rails 4.0.2 and 4.0.9.  Your question made me realize that I haven't tried rails-api 4.2.3 without the old gems.  I will try a test app running the latest version of rails-api and see if anything changes.  I might be fighting a problem that has been solved in the most recent versions.  If so, I have a totally different issue:  how to get the obsolete gems updated. ;-)

I'll get back to you (in a few hours).

Thanks,

Don
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/8591d477-92f2-4601-a0b8-a55c4081736e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/55B3D75A.3080303%40ziesig.org.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment