2012-12-06 14 views
10

WennErste Schienen-api und strong_parameters arbeiten zusammen

einschließlich
gem 'strong_parameters' 
gem 'rails-api' 

zusammen in meinem Gemfile, ruft params.require wie

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

mit dem folgenden Fehler fehl am require() Anruf.

TypeError: 
    can't convert Symbol into String 

Der Backtrace zeigt strong_parameters 'ActionController::StrongParameters' require() Methode nie getroffen wird.

Antwort

32

Ich verbrachte zu lange auf diesem einen, also dachte ich, ich würde hier teilen, um hoffentlich jemand anderen ein wenig Zeit zu sparen.

Der Fehler, der oben aus dem require() Verfahren in ActiveSupport::Dependencies::Loadable kommt, wenn

params.require(:user)... 

strong_parameters spritzt am unteren Rand des this file mit

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

Die rails-api gem erfordert Ihrer App ActionController::StrongParameters in ActionController::Base Aufruf wird ausgeführt ApplicationController Erweitern Sie ActionController::API zugunsten ActionController::Base

Die Anwendungscontroller wissen nichts über ActionController::StrongParameters, weil sie nicht die Klasse erweitern ActionController::StrongParameters wurde innerhalb enthalten. Aus diesem Grund ruft der Methodenaufruf require() nicht die Implementierung in ActionController::StrongParameters auf.

Um ActionController::API über ActionController::StrongParameters zu teilen ist so einfach wie das Hinzufügen der folgenden zu einer Datei in config/initializers.

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

tatsächlich versucht ich eine Datei zu verlangen Code und erwartet, dass der Dateiname ein String ist, daher der Fehler. – amoebe

1

Ich habe ein pull request (zur Zeit offen), die dieses Verhalten beheben sollen. Stattdessen ActionController::API.send aufzurufen, sollte diese mit einbezogen werden ...

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

Dieses Problem kann durch die Einbeziehung der rails_api Master git branch in Ihrem Gemfile wie unten gelöst werden:

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

rails_api gem hat

diese issue fixiert die folgenden Zeilen an api.rb

einschließlich
if Rails::VERSION::MAJOR == 4 
    include StrongParameters 
end 
Verwandte Themen