让rails-api和strong_parameters一起工作

dee*_*our 10 ruby-on-rails rails-api strong-parameters

包括时

gem 'strong_parameters'
gem 'rails-api'
Run Code Online (Sandbox Code Playgroud)

在一起的我Gemfile,呼吁params.require

private
  def user_params
    params.require(:user).permit(:first_name, :last_name)
  end
Run Code Online (Sandbox Code Playgroud)

require()通话中出现以下错误失败.

TypeError:
   can't convert Symbol into String
Run Code Online (Sandbox Code Playgroud)

回溯显示strong_parameters' ActionController::StrongParameters' require()方法永远不会被击中.

dee*_*our 33

我在这个上花了太长时间,所以我想我会在这里分享,希望能节省一些时间.

上面的错误来自于调用时执行的require()方法ActiveSupport::Dependencies::Loadable

params.require(:user)...
Run Code Online (Sandbox Code Playgroud)

strong_parameters注入ActionController::StrongParametersActionController::Base在底部此文件

ActionController::Base.send :include, ActionController::StrongParameters
Run Code Online (Sandbox Code Playgroud)

rails-api宝石需要你的应用程序的ApplicationController扩展ActionController::API支持ActionController::Base

应用程序控制器不知道任何事情,ActionController::StrongParameters因为他们没有扩展类ActionController::StrongParameters包含在内.这就是require()方法调用没有调用实现的原因ActionController::StrongParameters.

要讲述就像在文件中添加以下ActionController::API内容ActionController::StrongParameters一样简单config/initializers.

ActionController::API.send :include, ActionController::StrongParameters
Run Code Online (Sandbox Code Playgroud)


小智 5

这个问题可以通过在Gemfile中包含rails_api master git branch来解决,如下所示:

gem 'rails-api', git: 'https://github.com/rails-api/rails-api.git', branch: 'master'
Run Code Online (Sandbox Code Playgroud)

rails_api gem 通过在api.rb中包含以下行来修复此问题

if Rails::VERSION::MAJOR == 4
   include StrongParameters
end
Run Code Online (Sandbox Code Playgroud)