2012-12-06 13 views
10

Quando compresiOttenere rotaie-api e strong_parameters di lavorare insieme

gem 'strong_parameters' 
gem 'rails-api' 

insieme nella mia Gemfile, chiamando params.require come

private 
    def user_params 
    params.require(:user).permit(:first_name, :last_name) 
    end 

non riesce con il seguente errore sulla chiamata require().

TypeError: 
    can't convert Symbol into String 

Il backtrace mostra strong_parameters 'ActionController::StrongParameters' metodo require() non è mai colpito.

risposta

32

Ho speso troppo tempo su questo, quindi ho pensato di condividere qui per sperare di salvare qualcun altro un po 'di tempo.

L'errore precedente deriva dal metodo require() in ActiveSupport::Dependencies::Loadable essere eseguito al momento della chiamata

params.require(:user)... 

strong_parameters inietta ActionController::StrongParameters in ActionController::Base in fondo this file con

ActionController::Base.send :include, ActionController::StrongParameters 

Il rails-api gemma richiede la vostra applicazione di ApplicationController estendere ActionController::API in favore di ActionController::Base

I controller dell'applicazione non conoscono nulla di ActionController::StrongParameters perché non stanno estendendo la classe ActionController::StrongParameters è stata inclusa all'interno. Questo è il motivo per cui la chiamata al metodo require() non sta chiamando l'implementazione in ActionController::StrongParameters.

Per dire ActionController::API su ActionController::StrongParameters è semplice come aggiungere il seguente a un file in config/initializers.

ActionController::API.send :include, ActionController::StrongParameters 
+0

io in realtà tenta di richiedere un file come codice e si aspetta che il nome del file sia una stringa, quindi l'errore. – amoebe

1

Ho un pull request (attualmente aperto) che dovrebbe risolvere questo comportamento. Invece di chiamare ActionController::API.send, questo dovrebbe essere incluso con ...

ActiveSupport.on_load(:action_controller) do 
    include ActionController::StrongParameters 
end 
5

Questo problema può essere risolto inserendo la rails_api branch master git nel vostro Gemfile come di seguito:

gem 'rails-api', git: 'https://github.com/rails-api/rails-api.git', branch: 'master' 

rails_api gemma ha risolto questo issue includendo le righe sotto al api.rb

if Rails::VERSION::MAJOR == 4 
    include StrongParameters 
end 
Problemi correlati