[英]“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') %>");
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
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.