Unfortunately, no. That is exactly the problem. The expression
params.require(:user) (for example) returns a string in rails-api and an
object which has .permit as a method in just plain rails. All of the
"solutions" try to change the controller from one derived from ::Api
(does not support strong parameters) to one derived from ::Base (which
does support strong parameters). :'( .
The error above comes from the require() method in ActiveSupport::Dependencies::Loadable being executed when
calling
params.require(:user)...
strong_parameters injects ActionController::StrongParameters into ActionController::Base at the bottom of this file with
ActionController::Base.send :include, ActionController::StrongParameters
The rails-api gem requires your
app's ApplicationController extend ActionController::API in favor of ActionController::Base
The application controllers
don't know anything about ActionController::StrongParametersbecause
they're not extending the class ActionController::StrongParameters was included within.
This is why the require() method call is not
calling the implementation in ActionController::StrongParameters.
To tell ActionController::API about ActionController::StrongParameters is as simple as adding
the following to a file in config/initializers.
ActionController::API.send :include, ActionController::StrongParameters
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/5b254d75-5201-4d31-bec5-3c06a6a5edbf%40googlegroups.com.
Hi Fred,
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 happy from a memory usage point of view.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/55B39BB7.6070407%40ziesig.org.
On Saturday, July 25, 2015 at 4:34:48 AM UTC+1, donz wrote:Unfortunately, no. That is exactly the problem. The expression
params.require(:user) (for example) returns a string in rails-api and an
object which has .permit as a method in just plain rails. All of the
"solutions" try to change the controller from one derived from ::Api
(does not support strong parameters) to one derived from ::Base (which
does support strong parameters). :'( .
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 error above comes from the require() method in ActiveSupport::Dependencies::Loadable being executed when
calling
params.require(:user)...
strong_parameters injects ActionController::StrongParameters into ActionController::Base at the bottom of this file with
ActionController::Base.send :include, ActionController::StrongParameters
The rails-api gem requires your app's ApplicationController extend ActionController::API in favor of ActionController::Base
The application controllers don't
know anything about ActionController::StrongParametersbecause
they're not extending the class ActionController::StrongParameters was included within.
This is why the require() method call is not
calling the implementation in ActionController::StrongParameters.
To tell ActionController::API about ActionController::StrongParameters is as simple as adding
the following to a file in config/initializers.
ActionController::API.send :include, ActionController::StrongParameters
--On 07/24/2015 10:09 PM, BuyzLots wrote:
> Your payload looks like a string, is permit something you can call on a string object?
>
>
>
>> On Jul 24, 2015, at 9:31 PM, Donald Ziesig <don...@ziesig.org> wrote:
>>
>> Hi All!
>>
>> I have been trying just about everything I can find on the web to make rails-api work with strong_parameters but no matter what I do, I get the following error:
>>
>> NoMethodError (undefined method `permit' for "{email: x...@xxx.org, password: xxxxxxxxx}":String):
>>
>> All of the answers I have found give ways to add StrongParameters to ApplicationController::Api, but none of them change the resulting error. Debug printouts show that the recommended changes are being executed. I generated a test app using rails without -api and it works fine, but is much bigger due to all of the non-api cruft.
>>
>> I am using both rails 4.0.2 and 4.0.9 (can't use higher versions due to some old but necessary gems).
>>
>> Any help would be appreciated.
>>
>> Thanks,
>>
>> Don Ziesig
>>
>> --
>> 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-ta...@googlegroups.com.
>> To post to this group, send email to rubyonra...@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/55B2E6FF.9060607%40ziesig.org.
>> 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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/5b254d75-5201-4d31-bec5-3c06a6a5edbf%40googlegroups.com.
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.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
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):
--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@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.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/55B3D75A.3080303%40ziesig.org.