我在点击链接时尝试执行POST
请求。该操作一直尝试重定向到POST
网址。
路线
post '/foo/:id/bar' => 'foo#bar', :as => 'bar'
链接
<%= link_to 'Bar', bar_path(item), :method => :post %>
动作
def bar
@item = Item.find(params[:id])
# Do stuff with item
respond_to do |format|
format.html { render :nothing => true, :status => 200 }
end
end
我在format.all
声明之外尝试了render :nothing => true
和respond_to
。难以理解为什么这会尝试重定向。
答案 0 :(得分:0)
我的猜测是你在路线文件中定义的路径可能与resource :bar
或类似的东西相同。
尝试使用文件顶部定义的路线来查看是否可以解决您的问题。
答案 1 :(得分:0)
不确定您是否尝试使用Ajax提交或希望页面呈现某些内容,因此我发布了两个示例。常规帖子将返回“有效!”的文字。 ajax帖子将触发Javascript警报。
查看强>
# app/views/foos/index.html.erb
<h1>Foos</h1>
<p><%= link_to 'Bar', '/foo/1/bar', method: :post %></p>
<p><%= link_to 'Bar with ajax', '/foo/1/bar', method: :post, remote: true %></p>
<强>控制器强>
# app/views/foos_controller.rb
class FoosController < ApplicationController
def bar
respond_to do |format|
format.html { render text: 'it worked!' }
format.js {
# head :no_content
render text: "alert('it worked!')"
}
end
end
end
<强>路线强>
# config/routes.rb
Testing::Application.routes.draw do
get '/foo' => 'foos#index'
post '/foo/:id/bar' => 'foos#bar', as: :bar
end
如果您不想要Javascript警报消息并且不希望ajax请求返回任何内容,请取消注释head :no_content
并删除行render text: "alert('it worked!')"