【问题标题】:Getting rails-api and strong_parameters to work together让 rails-api 和 strong_parameters 一起工作
【发布时间】:2012-12-06 14:27:43
【问题描述】:

当包括

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

【问题讨论】:

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


    【解决方案1】:

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

    上述错误来自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::StrongParameters 就像在config/initializers 的文件中添加以下内容一样简单。

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

    【讨论】:

    • 我实际上试图要求一个文件作为代码并期望文件名是一个字符串,因此错误。
    【解决方案2】:

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

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

    rails_api gem 已通过在api.rb 包含以下行来修复此issue

    if Rails::VERSION::MAJOR == 4
       include StrongParameters
    end
    

    【讨论】:

      【解决方案3】:

      我有一个pull request(当前打开)应该可以解决此问题。而不是调用ActionController::API.send,这应该包含在...

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        • 2010-09-11
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多