“Respond_to do | format |” lanza el error UnknownFormat

Estoy intentando renderizar un archivo js desde un controlador con ajax. Este código exacto siempre funcionó antes, e incluso funciona con otros métodos, pero de repente comencé a recibir este error:

ActionController::UnknownFormat in MoviesController#vote ActionController::UnknownFormat 

Controlador de películas:

 def vote ... respond_to do |format| #The error points to this line. format.js end end 

vote.js.erb:

 $('#votes').html(""); 

El enlace:

movies.html.erb:

  

_votes.html.erb

  

rutas.rb:

 post 'movies/vote' => 'movies#vote', as: 'vote' 

¿Por qué de repente estoy recibiendo este error? ¿Por qué funciona en diferentes contextos pero no en este?

Uso de Rails 4.0.10

ACTUALIZACIÓN: Stack Trace

Traza de aplicación:

 app/controllers/movies_controller.rb:394:in `vote' 

Traza completa:

 actionpack (4.0.10) lib/action_controller/metal/mime_responds.rb:372:in `retrieve_collector_from_mimes' actionpack (4.0.10) lib/action_controller/metal/mime_responds.rb:189:in `respond_to' app/controllers/movies_controller.rb:394:in `vote' actionpack (4.0.10) lib/action_controller/metal/implicit_render.rb:4:in `send_action' actionpack (4.0.10) lib/abstract_controller/base.rb:189:in `process_action' actionpack (4.0.10) lib/action_controller/metal/rendering.rb:10:in `process_action' actionpack (4.0.10) lib/abstract_controller/callbacks.rb:18:in `block in process_action' activesupport (4.0.10) lib/active_support/callbacks.rb:413:in `_run__1492335060096380544__process_action__callbacks' activesupport (4.0.10) lib/active_support/callbacks.rb:80:in `run_callbacks' actionpack (4.0.10) lib/abstract_controller/callbacks.rb:17:in `process_action' actionpack (4.0.10) lib/action_controller/metal/rescue.rb:29:in `process_action' actionpack (4.0.10) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' activesupport (4.0.10) lib/active_support/notifications.rb:159:in `block in instrument' activesupport (4.0.10) lib/active_support/notifications/instrumenter.rb:20:in `instrument' activesupport (4.0.10) lib/active_support/notifications.rb:159:in `instrument' actionpack (4.0.10) lib/action_controller/metal/instrumentation.rb:30:in `process_action' actionpack (4.0.10) lib/action_controller/metal/params_wrapper.rb:250:in `process_action' activerecord (4.0.10) lib/active_record/railties/controller_runtime.rb:18:in `process_action' actionpack (4.0.10) lib/abstract_controller/base.rb:136:in `process' actionpack (4.0.10) lib/abstract_controller/rendering.rb:44:in `process' actionpack (4.0.10) lib/action_controller/metal.rb:195:in `dispatch' actionpack (4.0.10) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' actionpack (4.0.10) lib/action_controller/metal.rb:231:in `block in action' actionpack (4.0.10) lib/action_dispatch/routing/route_set.rb:82:in `call' actionpack (4.0.10) lib/action_dispatch/routing/route_set.rb:82:in `dispatch' actionpack (4.0.10) lib/action_dispatch/routing/route_set.rb:50:in `call' actionpack (4.0.10) lib/action_dispatch/journey/router.rb:71:in `block in call' actionpack (4.0.10) lib/action_dispatch/journey/router.rb:59:in `each' actionpack (4.0.10) lib/action_dispatch/journey/router.rb:59:in `call' actionpack (4.0.10) lib/action_dispatch/routing/route_set.rb:676:in `call' warden (1.2.3) lib/warden/manager.rb:35:in `block in call' warden (1.2.3) lib/warden/manager.rb:34:in `catch' warden (1.2.3) lib/warden/manager.rb:34:in `call' rack (1.5.5) lib/rack/etag.rb:23:in `call' rack (1.5.5) lib/rack/conditionalget.rb:25:in `call' rack (1.5.5) lib/rack/head.rb:11:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/params_parser.rb:27:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/flash.rb:241:in `call' rack (1.5.5) lib/rack/session/abstract/id.rb:225:in `context' rack (1.5.5) lib/rack/session/abstract/id.rb:220:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/cookies.rb:486:in `call' activerecord (4.0.10) lib/active_record/query_cache.rb:36:in `call' activerecord (4.0.10) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' activerecord (4.0.10) lib/active_record/migration.rb:373:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' activesupport (4.0.10) lib/active_support/callbacks.rb:373:in `_run__2656547782179467807__call__callbacks' activesupport (4.0.10) lib/active_support/callbacks.rb:80:in `run_callbacks' actionpack (4.0.10) lib/action_dispatch/middleware/callbacks.rb:27:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/reloader.rb:64:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' web-console (2.2.1) lib/web_console/middleware.rb:39:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' railties (4.0.10) lib/rails/rack/logger.rb:38:in `call_app' railties (4.0.10) lib/rails/rack/logger.rb:20:in `block in call' activesupport (4.0.10) lib/active_support/tagged_logging.rb:68:in `block in tagged' activesupport (4.0.10) lib/active_support/tagged_logging.rb:26:in `tagged' activesupport (4.0.10) lib/active_support/tagged_logging.rb:68:in `tagged' railties (4.0.10) lib/rails/rack/logger.rb:20:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/request_id.rb:21:in `call' rack (1.5.5) lib/rack/methodoverride.rb:21:in `call' rack (1.5.5) lib/rack/runtime.rb:17:in `call' activesupport (4.0.10) lib/active_support/cache/strategy/local_cache.rb:83:in `call' rack (1.5.5) lib/rack/lock.rb:17:in `call' actionpack (4.0.10) lib/action_dispatch/middleware/static.rb:64:in `call' rack (1.5.5) lib/rack/sendfile.rb:112:in `call' railties (4.0.10) lib/rails/engine.rb:511:in `call' railties (4.0.10) lib/rails/application.rb:97:in `call' rack (1.5.5) lib/rack/lock.rb:17:in `call' rack (1.5.5) lib/rack/content_length.rb:14:in `call' rack (1.5.5) lib/rack/handler/webrick.rb:60:in `service' /home/greg/.rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' /home/greg/.rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' /home/greg/.rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 

Puede especificar la opción de format para que el asistente de ruta le indique al enlace que sea js lugar del html predeterminado. Especifíquelo así:

 <%= link_to "vote", vote_path(format: :js), method: :post, remote: true %> 

He tenido problemas para hacer que eso funcione con algunas versiones de Rails en el pasado, pero solo tengo evidencia anecdótica al respecto. Lo que encontré funciona en esa circunstancia es esto:

 <%= link_to "vote", "#{vote_path}.js", method: :post, remote: true %> 

En el segundo caso, simplemente agregue la extensión .js a la ruta url que activará el formato js . Fuerza no bruta y poco elegante, solo para ser utilizada DESPUÉS de intentar sin éxito la manera correcta , pero funciona.

tratar :

 def vote respond_to do |format| if @comment.update(comment_params) format.js {render nothing: true} format.json { render :show, status: :ok, location: @comment } else format.html { render :edit } format.json { render json: @comment.errors, status: :unprocessable_entity } end end end 

Si la statement se ejecuta con éxito como @ comment.update (comment_params), el comentario se actualiza con éxito, luego ejecuta formate.js, pero si falla debido a alguna razón, entonces encuentra la instrucción de representación. Si no está presente, da error de formato desconocido.