redirect_to显示页面而不是在控制器中更新?轨道

时间:2017-08-30 10:39:19

标签: ruby-on-rails ruby

我正在我的控制器动作中重定向这样的事情

format.html { redirect_to product_path(@product) }

将我带到PUT /products/123456

但我想去GET /products/123456。 有人可以解释一下为什么会这样。我应该使用什么样的辅助方法来处理GET请求?

根据文档product_path(@product),所有GET, PUT/PATCHDELETE.

是comon

我找不到任何传递类似

的选项
format.html { redirect_to product_path(@product) }, method: :get

redirect_to api doc中。请解释我如何实现这一目标。感谢

更新

def delete_product_media
  @product = Product.find(params[:id])
  @product_media = ProductMedium.where(id: params[:product_media_ids])

  respond_to do |format|
    if @product_media.update_all(deleted_at: Time.zone.now) == params[:product_media_ids].count
      flash[:notice] = 'Media deleted'
      flash.keep(:notice)
      format.html { redirect_to product_path(@product), method: :get }
    else
      flash[:notice] = 'Something went wrong!'
      flash.keep(:notice)
      format.html {redirect_to product_path(@product) }
    end
  end

end

2 个答案:

答案 0 :(得分:0)

使用redirect_to(默认HTTP 302 Found)的重定向应保留该方法,但并非总是如此。如果您想强制使用303 See Other,则可以使用GET

请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302

  

即使规范要求在执行重定向时不要改变方法和正文,也不是所有的用户代理都符合这里,你仍然可以在那里找到有缺陷的软件。因此,建议仅将302代码设置为GET或HEAD方法的响应,并使用307临时重定向,因为在这种情况下明确禁止方法更改。

     

如果您希望将方法更改为GET,请使用303另请参阅。当您想要回答不是上传资源的PUT方法,而是确认消息(例如"您已成功上传XYZ")时,这非常有用。

对于redirect_tostatus选项会覆盖默认值,例如redirect_to product_path(@product), status: :see_other

答案 1 :(得分:-1)

如果要重定向到显示页面,可以redirect_to @products。将像GET / products / 123456一样处理。