POST请求尝试重定向

时间:2013-12-20 21:40:29

标签: ruby-on-rails routing

我在点击链接时尝试执行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 => truerespond_to。难以理解为什么这会尝试重定向。

2 个答案:

答案 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!')"