2013-12-20 71 views
0

我试图在单击链接时执行POST请求。该操作不断尝试重定向到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 

我试过声明之外的10和render :nothing => true。难住为什么这是试图重定向。

+0

您是否在使用此操作使用ajax? – summea

回答

0

我的猜测是,你的路线文件中早些时候定义的路线可能与resource :bar或类似的东西类似。

尝试使用文件顶部定义的路径来查看这是否解决了您的问题。

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的人ert消息,并不希望ajax请求返回任何东西,取消注释head :no_content并删除行render text: "alert('it worked!')"