Per*_*eoh 23 rest ruby-on-rails
我在名为的控制器中有以下方法 tareas_controller
def destroy
@tarea = Tarea.find(params[:id])
@tarea.destroy
respond_to do |format|
format.html { redirect_to tareas_url }
format.json { head :ok }
format.js { redirect_to :controller => "clientes", :action =>"show", :id => @tarea.cliente, :format => :js, :method=>:get}
end
end
Run Code Online (Sandbox Code Playgroud)
记录被删除了,之后我在服务器上获得以下代码:
重定向到http://127.0.0.1:3000/clientes/12.js?method=get 已完成302发现于174ms
在2012-05-06 19:20:07开始删除"/clientes/12.js?method=get"for 127.0.0.1 +0200由ClientesController处理#Drown如JS参数:{"method"=>"get", "id"=>"12"} Cliente Load(0.0ms)SELECT"clientes".*FROM"clientes"WHERE"clientes"."id"=?LIMIT 1 [["id","12"]] SQL(2.0ms)DELETE FROM"clientes"WHERE"clientes"."id"=?[["id",12]]已完成406在131ms内无法接受
它似乎将带有DELETE谓词的请求发送到新控制器,我无法找到将其更改为对新控制器的GET请求的方法.
有人可以告诉我如何解决这个问题吗?
seq*_*elo 34
您应该使用状态303重定向.
如果您使用GET或POST以外的XHR请求并在请求后重定向,则某些浏览器将使用原始请求方法跟踪重定向.这可能会导致不良行为,例如双重DELETE.要解决此问题,您可以返回一个
303 See Other
状态代码,使用GET请求将遵循该状态代码.Run Code Online (Sandbox Code Playgroud)redirect_to posts_url, status: :see_other redirect_to action: 'index', status: 303
资料来源:http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to
解决了,虽然不是很好。
创建了以下路线:
match 'mostrar_cliente/:id' => 'clientes#show', :via => :delete
Run Code Online (Sandbox Code Playgroud)
然后我将重定向重写为:
redirect_to "/mostrar_cliente/#{@tarea.cliente}", :format => :js
Run Code Online (Sandbox Code Playgroud)
不是一个非常干净的解决方案,但按预期工作:)
归档时间: |
|
查看次数: |
8313 次 |
最近记录: |