我有一个像这样的命名空间模型:
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
谁可以提供帮助或有什么想法?
答案 0 :(得分:1)
我遇到了同样的错误,并且我刚刚成功找出了此问题的原因。 这是因为abstract-controller会尝试包装您的参数,并将您的控制器类名转换为模型名。 默认情况下,在config / initializers / wrap_parameters.rb文件中启用了用于json请求的params-wrapper。 但是您也可以在控制器级别禁用此功能,方法是在控制器中定义下一行:
wrap_parameters format: []