Rails响应程序重定向到创建索引导致形式奇怪的行为

时间:2013-02-12 15:32:20

标签: ruby-on-rails

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

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语句,它可以正常运行,但不会转到我想要的网址。

我该如何解决这个问题?

提前致谢。


修改

我将方法改为

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

它有效......但是,我有点奇怪,我不得不使用字符串代替tests_url


编辑2

请参阅此complete example codeBug report


编辑3

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

1 个答案:

答案 0 :(得分: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,则会发送重定向。