简体   繁体   English

“respond_to do | format |”抛出UnknownFormat错误

[英]“respond_to do |format|” throws UnknownFormat error

I'm trying to render a js file from a controller with ajax. 我正在尝试使用ajax从控制器渲染一个js文件。 This exact code always worked before, and it even works in other methods, but I suddenly started getting this error: 这个确切的代码以前总是工作,它甚至可以在其他方法中工作,但我突然开始收到此错误:

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

Movies Controller: 电影控制器:

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

vote.js.erb: vote.js.erb:

$('#votes').html("<%= escape_javascript(render 'votes') %>");

The link: 链接:

movies.html.erb: movies.html.erb:

<%= render 'votes' %>

_votes.html.erb _votes.html.erb

<%= link_to "vote", vote_path, method: :post, remote: true %>

routes.rb: routes.rb中:

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

Why am I suddenly getting this error? 为什么我突然收到此错误? Why does it work in different contexts but not in this one? 为什么它在不同的环境中工作而在这个环境中不起作用?

Using Rails 4.0.10 使用Rails 4.0.10

UPDATE: Stack Trace 更新:堆栈跟踪

Application Trace: 应用跟踪:

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

Full Trace: 完整跟踪:

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'

You can specify the format option for the route helper to instruct the link to be js instead of the default html . 您可以指定路由助手的format选项,以指示链接为js而不是默认的html Specify it like this: 像这样指定:

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

I've had issues getting that to work with some versions of Rails in the past, but I only have anecdotal evidence about that. 我过去曾经遇到过与某些版本的Rails一起工作的问题,但我只有传闻证据。 What I found does work in that circumstance is this: 我发现在这种情况下工作的是:

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

In the 2nd case, you simply append the .js extension to the url path that will trigger the js format. 在第二种情况下,您只需将.js扩展名附加到将触发js格式的url路径。 Inelegant and brute force, only to be used AFTER unsuccessfully trying the right way, but it does work. 优雅和蛮力,只有在尝试正确的方式失败后使用,但它确实有效。

try : 尝试:

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

if statement is run successfully like @comment.update(comment_params), comment is update successfully then it execute formate.js, but if it fails due to some reason then it find else render statement. 如果语句成功运行,如@ comment.update(comment_params),则注释成功更新,然后执行formate.js,但如果由于某种原因失败,则会发现其他渲染语句。 If it not present, it gives Unknown formate error. 如果不存在,则会出现Unknown formate错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Rails,“ respond_to do | format |”返回ActionController :: UnknownFormat - Rails, “respond_to do |format|” returns ActionController::UnknownFormat ActionController :: UnknownFormat当使用response_来做| format |时 在Rails 5应用中 - ActionController::UnknownFormat When using respond_to do |format| in rails 5 app response_do |格式| 在rails 5应用程序中给出“ UsersController#show中的UnknownFormat” - respond_to do |format| gives “UnknownFormat in UsersController#show” in rails 5 app 在Response_to中使用JavaScript格式时,ActionController :: UnknownFormat - ActionController::UnknownFormat while using javascript format in respond_to 带AJAX的response_to js的ActionController :: UnknownFormat - ActionController::UnknownFormat with respond_to js for AJAX 在Action:Create中使用带有response_to js的ActionController :: UnknownFormat - ActionController::UnknownFormat with respond_to js in Action:Create 添加respond_to时的ActionController::UnknownFormat - ActionController::UnknownFormat when add respond_to Rails respond_to 抛出 ActionController::UnknownFormat - Rails respond_to throw ActionController::UnknownFormat respond_to 做 |格式| format.js 在 Rails 6.1.3 中不起作用 - respond_to do |format| format.js not working in rails 6.1.3 Rails 7 ActionController::UnknownFormat 在 CommentsController#create respond_to - Rails 7 ActionController::UnknownFormat in CommentsController#create respond_to
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM