4

在我的控制器中,我有这个:

class TestController < ApplicationController
  respond_to :html, :json

  # code...

  def create
    @test = current_user.tests.create(params[:test])
    respond_with @test, location: tests_url
  end

  # code...

end

这很酷,当我创建 时test,它会重定向到test#index(如预期的那样),但是,如果我按下F5,浏览器会要求我重新提交表单。

如果我从中删除该location语句respond_with就可以了,但不会转到我想要的 URL。

我该如何解决这个问题?

提前致谢。


编辑

我将方法更改为

@test = current_user.tests.new(params[:transaction])
respond_with(@test) do |format|
  format.html { redirect_to "/tests/" } if @test.save
end

它有效.. 但是,我不得不使用 String 而不是tests_url.


编辑 2

请参阅此完整示例代码错误报告


编辑 3

我无法用 Ruby 1.9.3-p327 重现它,只能在 -p385 中。

4

1 回答 1

0

您可以只使用该redirect_to方法,如下所示:

def create
  @test = current_user.tests.create(params[:test])
  respond_with @test do |format|
    format.html { redirect_to tests_path }
  end
end

然后,如果客户端要求 json 响应,to_json将触发默认行为,但如果所需的响应格式是 html,则将发送重定向。

于 2013-02-13T20:29:23.120 回答