让rails-api和strong_parameters一起工作

时间:2012-12-06 14:27:43

标签: ruby-on-rails rails-api strong-parameters

包括

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()方法永远不会被击中。

3 个答案:

答案 0 :(得分:33)

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

上述错误来自调用

时执行ActiveSupport::Dependencies::Loadable中的require()方法
params.require(:user)...

strong_parametersActionController::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::StrongParametersconfig/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.rb
if 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