2012-12-06 9 views
10

Po tymPierwsze rails-api i strong_parameters współpracować

gem 'strong_parameters' 
gem 'rails-api' 

razem w moim Gemfile, nazywając params.require jak

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

nie powiedzie się z powodu następującego błędu na wezwanie require().

TypeError: 
    can't convert Symbol into String 

backtrace pokazuje strong_parameters 'ActionController::StrongParameters' require() metoda nigdy nie jest trafiony.

Odpowiedz

32

Zbyt dużo czasu spędziłem na tym, więc pomyślałem, że będę się tu dzielić, aby, mam nadzieję, uratować komuś jeszcze trochę czasu.

Błąd powyżej pochodzi od sposobu require() w ActiveSupport::Dependencies::Loadable wykonywane podczas wywoływania

params.require(:user)... 

strong_parameters wstrzykuje ActionController::StrongParameters do ActionController::Base na dole this file z

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

rails-api klejnot wymaga aplikacja na ApplicationController przedłużyć ActionController::API na rzecz ActionController::Base

Kontrolery aplikacji nie wiedzą nic o ActionController::StrongParameters, ponieważ nie rozszerzają klasy ActionController::StrongParameters. Dlatego wywołanie metody require() nie wywołuje implementacji w ActionController::StrongParameters.

Powiedzenie ActionController::API o ActionController::StrongParameters jest tak proste, jak dodanie do pliku w config/initializers.

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

Tak naprawdę próbuję wymagać pliku jako kod i oczekuje nazwy pliku jako String, stąd błąd. – amoebe

1

Mam pull request (obecnie otwarte), który powinien naprawić to zachowanie. Zamiast wywoływać ActionController::API.send, powinno być dołączone ...

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

Problem ten może być rozwiązany poprzez uwzględnienie rails_api mistrz git oddział w Gemfile jak poniżej:

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

rails_api gem ma Naprawiono to issue, włączając poniższe linie pod api.rb

if Rails::VERSION::MAJOR == 4 
    include StrongParameters 
end 
Powiązane problemy