我正在将我的一些rails 4应用程序中的一些请求迁移到ajax,并且在重定向时遇到了一些麻烦。redirect_to使用PATCH谓词不GET
在主页上,我有一个可以启用/禁用的项目列表,非常简单。这是所有照顾两个中的一个环节<%= link_to "disable", toggle_my_class_path(my_class), method: "PATCH", remote: true %>
在ApplicationController
我有一个before_action
来检查,如果当前用户登录,如果不是他们重定向到显示在日志中形式的主页。
def require_login
unless current_user
redirect_to root_url, :notice => "Please log in"
end
end
的问题是,(我认为),因为Ajax调用不知何故被用于代替GET这是造成路由问题PATCH动词。下面是从我的呼叫日志输出
Started PATCH "/my_class/2/toggle" for 127.0.0.1 at 2014-04-10 16:33:52 -0500
Processing by MyClassController#toggle as JS
Parameters: {"id"=>"2"}
Can't verify CSRF token authenticity
(0.1ms) SELECT COUNT(*) FROM "users"
Redirected to http://localhost:3000/
Filter chain halted as :require_login rendered or redirected
Completed 302 Found in 9ms (ActiveRecord: 1.3ms)
Started PATCH "/" for 127.0.0.1 at 2014-04-10 16:33:56 -0500
ActionController::RoutingError (No route matches [PATCH] "/"):
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
/home/***/.rvm/rubies/ruby-head/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
/home/***/.rvm/rubies/ruby-head/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
/home/***/.rvm/rubies/ruby-head/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
你可以看到,的ActionController :: RoutingError(无路由匹配[PATCH]“/”):是问题
我不知道的一种解决方法。我不想PATCH
动词被使用,但我似乎无法找到一种方法来指定动词redirect_to
有什么想法?
不能从服务器端(控制器)的'ajax'呼叫重定向内。一切通过javascript检索返回到javacript。所以你需要使用javascript来执行重定向。 – markets