2017-02-08 96 views
0

我试图通过的link_to通过以下方式发送POST请求:的Rails的link_to发送POST,当您使用方法GET请求:后

link_to 'go to transition', transition_diagnosis_path, method: :post

我的DiagnosisController的行动transition,但是当我点击链接时,这会发送两个请求,POST和GET。第一个请求成功执行,但最后一个请求将未知参数发送到show操作,因此会返回错误。

Started POST "/diagnosis/transition" for 127.0.0.1 at 2017-02-08 17:45:32 -0200 
Processing by DiagnosisController#transition as HTML 
    Parameters: {"authenticity_token"=>"XXXXXXXXXXXXX"} 
Redirected to http://localhost:3000/analysis 
Completed 302 Found in 1126ms (ActiveRecord: 128.0ms) 

Started GET "/diagnosis/transition" for 127.0.0.1 at 2017-02-08 17:45:33 -0200 
Processing by DiagnosisController#show as HTML 
    Parameters: {"id"=>"transition"} 
Completed 500 Internal Server Error in 975ms (ActiveRecord: 24.8ms) 

有谁知道我该怎么办?提前致谢。


UPDATE:

当我试图做到这一点的正常工作

link_to transition_diagnosis_path, method: :post do 
    button_tag 'go to transition' 
end 
+0

尝试添加'远程:TRUE'选项,看的出它行为 –

+0

@DamianSimonPeter add'remote:true'保持相同的行为。点击链接继续发送两个请求。 –

回答

0

在诊断控制器的过渡方法,动作后,有可能被重定向您重定向 - 这是第二个获取请求是什么。

你可以摆脱重定向。删除,看起来像这样的过渡方法的一部分:

respond_to do |format| 
    format.js { render :nothing => true } 
    format.html { redirect_to home_url } 
end 

而且,只要确保你的路由被宣布

post 'diagnosis/transition', to: 'diagnosis#transition'

+0

即使从“transition”动作中删除'redirect_to analysis_path',它仍会继续发送两个请求。这条路线就像你上面提到的一样。 –