未定义的方法`has_content_type?' nil:NilClass

undefined method `has_content_type?' for nil:NilClass

我有一个控制器操作,它使用一些 Javascript 在我的页面上加载表单。当我提交我的表单时,它没有创建 Rails 请求 object,我的问题标题中出现错误。

这是我加载到 DOM 后的表单:

<form class="new_alliance" id="new_alliance" action="/alliances" accept-charset="UTF-8" method="post">
  <input name="utf8" type="hidden" value="✓"><input type="hidden" name="authenticity_token" value="4aFNLwGQ5+LubOhZYgTxO+HIMRUpc15JeiWruLMrGWYrurX0Ugk/HLW2I3hMtrrCWzCJVORcNkXbFeJuS61Fxw==">
  <input value="downstream_requested" type="hidden" name="alliance[status]" id="alliance_status">
  <input value="7" type="hidden" name="alliance[upstream_group_id]" id="alliance_upstream_group_id">
  <input value="1" type="hidden" name="alliance[downstream_group_id]" id="alliance_downstream_group_id">
<input type="submit" name="commit" value="Request" data-disable-with="Request">

这是我得到 NoMethodError 的地方:

actionpack (5.0.0.1) lib/action_controller/metal/params_wrapper.rb(第 2 行)

def _wrapper_enabled?
  return false unless request.has_content_type?
  ref = request.content_mime_type.ref
  _wrapper_formats.include?(ref) && _wrapper_key && !request.request_parameters[_wrapper_key]
end

请求值为零。当我查看跟踪时,看起来 ActionDispatch 正在正确设置我的控制器和操作名称。我正在使用 better_errors,对于我的请求信息,它说:

#<ActionDispatch::Request::Session:0x7fa11c000ce8 not yet loaded>

感觉自己一直停留在这条路上,所以有点迷茫。我有什么解决办法吗?

编辑:为每个请求添加完整的错误跟踪。

Started POST "/alliances" for 127.0.0.1 at 2016-10-20 15:43:37 -0700
NoMethodError - undefined method `has_content_type?' for nil:NilClass:  
actionpack (5.0.0.1) lib/action_controller/metal/params_wrapper.rb:279:in `_wrapper_enabled?'  
actionpack (5.0.0.1) lib/action_controller/metal/params_wrapper.rb:231:in `process_action'  
activerecord (5.0.0.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'  
actionpack (5.0.0.1) lib/abstract_controller/base.rb:126:in `process'  
actionview (5.0.0.1) lib/action_view/rendering.rb:30:in `process'  
actionpack (5.0.0.1) lib/action_controller/metal.rb:190:in `dispatch'  
actionpack (5.0.0.1) lib/action_controller/metal.rb:262:in `dispatch'  
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'  
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (5.0.0.1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.0.1) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb:725:in `call'
bullet (5.4.2) lib/bullet/rack.rb:10:in `call'
warden (1.2.6) lib/warden/manager.rb:35:in `block in call'
warden (1.2.6) lib/warden/manager.rb:34:in `call'
rack (2.0.1) lib/rack/etag.rb:25:in `call'
rack (2.0.1) lib/rack/conditional_get.rb:38:in `call'
rack (2.0.1) lib/rack/head.rb:12:in `call'
rack (2.0.1) lib/rack/session/abstract/id.rb:222:in `context'
rack (2.0.1) lib/rack/session/abstract/id.rb:216:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.0.1) lib/active_record/migration.rb:552:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.1.1) lib/web_console/middleware.rb:131:in `call_app'
web-console (3.1.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.1.1) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.0.1) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `block in tagged'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `tagged'
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.1) lib/rack/method_override.rb:22:in `call'
rack (2.0.1) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.1) lib/rack/sendfile.rb:111:in `call'
railties (5.0.0.1) lib/rails/engine.rb:522:in `call'
rack (2.0.1) lib/rack/handler/webrick.rb:86:in `service'
/Users/ianyoung/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/Users/ianyoung/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/Users/ianyoung/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

当您忘记重启服务器时,这似乎是一个经常发生的问题。尝试退出您的服务器并重新启动它,看看会发生什么。

我的 AlliancesController 中有一个 request 方法。