发布JSON时模型的Mysterious Rails 5 API LoadError;作为表单数据过帐时没有错误

时间:2018-07-29 00:34:47

标签: ruby-on-rails

我有一个像这样的命名空间模型:

module A
  module B
    class C
    end
  end
end

app/models/a/b/c.rb中。

然后是控制器

module API
  module V2
    module B
      class CController
        include ActionController::RespondWith
        respond_to :json
      end
    end
  end
end

app/controllers/api/v2/b/c_controller.rb

已命名空间的文件通过application.rb自动加载到config.autoload_paths += Dir["#{Rails.root}/app/*/**/"]中。

Cors使用以下配置:

config.middleware.insert_after 0, Rack::Cors, logger: Rails.logger do
  allow do
    origins '*'
    resource '*',
             headers: :any,
             methods: %i[get options post put patch delete]
  end
end

现在,当我将参数作为表单数据发布到create动作时,一切正常。当我使用JSON字符串+ Content-Type application / json标头发出相同的请求时,出现此错误:

LoadError: Unable to autoload constant C, expected app/models/a/b/c.rb to define it

Rails 5.2.0,Ruby 2.5.1

谁可以提供帮助或有什么想法?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的错误,并且我刚刚成功找出了此问题的原因。 这是因为abstract-controller会尝试包装您的参数,并将您的控制器类名转换为模型名。 默认情况下,在config / initializers / wrap_parameters.rb文件中启用了用于json请求的params-wrapper。 但是您也可以在控制器级别禁用此功能,方法是在控制器中定义下一行:

wrap_parameters format: []