包括
gem 'strong_parameters'
gem 'rails-api'
在我的Gemfile
中一起调用params.require
,如
private
def user_params
params.require(:user).permit(:first_name, :last_name)
end
在require()
来电时出现以下错误。
TypeError:
can't convert Symbol into String
回溯显示strong_parameters
'ActionController::StrongParameters
'require()
方法永远不会被击中。
答案 0 :(得分:33)
我在这个上花了太长时间,所以我想我会在这里分享,希望能节省一些时间。
上述错误来自调用
时执行ActiveSupport::Dependencies::Loadable
中的require()
方法
params.require(:user)...
strong_parameters
将ActionController::StrongParameters
注入this file底部的ActionController::Base
ActionController::Base.send :include, ActionController::StrongParameters
rails-api
gem要求您的应用ApplicationController
延长ActionController::API
,以支持ActionController::Base
应用程序控制器对ActionController::StrongParameters
一无所知,因为它们没有扩展包含在其中的类ActionController::StrongParameters
。这就是require()
方法调用未在ActionController::StrongParameters
中调用实现的原因。
告诉ActionController::API
ActionController::StrongParameters
与config/initializers
中的文件一样简单。
ActionController::API.send :include, ActionController::StrongParameters
答案 1 :(得分:5)
可以通过在Gemfile中包含 rails_api master git branch 来解决此问题,如下所示:
gem 'rails-api', git: 'https://github.com/rails-api/rails-api.git', branch: 'master'
rails_api gem通过在issue
包含以下行来修复此api.rbif Rails::VERSION::MAJOR == 4
include StrongParameters
end
答案 2 :(得分:1)
我有一个pull request(当前打开)应该可以解决此问题。这不应该叫ActionController::API.send
,而应该包含在...... {/ p>中
ActiveSupport.on_load(:action_controller) do
include ActionController::StrongParameters
end