为什么redirect_to在创建操作中不起作用?

Sum*_*mak 2 ruby-on-rails ruby-on-rails-6

Rails 初学者,\n不知何故,我找不到在创建记录后重定向用户的方法。

\n\n

我有这个控制器:

\n\n
  def create\n    @product = Product.new(product_params)\n\n    respond_to do |format|\n      if @product.save\n        format.html { redirect_to @product, notice: \'Product successfully created\' }\n      else\n        format.html { render :new, notice: \'Error\' }\n      end\n    end\n  end\n\n  def product_params\n    params.require(:product).permit(:name, :description, :price, :quantity, :status, :image)\n  end\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过一些变体,例如redirect_to product_path(@product)删除format块,但没有任何效果。用于提交值的模型和表单似乎有效(验证已通过,记录已保存)。

\n\n

日志:

\n\n
Parameters: {"..."}\n  User Load (0.2ms)  SELECT ....\n  \xe2\x86\xb3 app/controllers/application_controller.rb:15:in \'admin?\'\n   (0.1ms)  BEGIN\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block in create\'\n  Product Exists? (0.4ms)  SELECT 1 ...\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block in create\'\n  Product Create (3.3ms)  INSERT INTO ...\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block in create\'\n   (55.3ms)  COMMIT\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block in create\'\nRedirected to http://localhost:3000/products/4137\nCompleted 200 OK in 65ms (ActiveRecord: 59.3ms | Allocations: 4974)\n
Run Code Online (Sandbox Code Playgroud)\n\n

有些东西阻止了重定向(notice更改页面后我仍然有消息),但控制器、表单、模型和日志对我来说看起来没问题。\n有人知道这里可能是什么原因吗?任何帮助将不胜感激!

\n

Raj*_*ngh 5

如果您form_with在 Rails 6 中使用帮助程序,那么它们默认是表单,XHR并且需要一个具有js格式的模板。要使它们响应html格式,请添加local: true选项。

<%= form_with(model: @product, local: true) do |f| %> 
Run Code Online (Sandbox Code Playgroud)

从 Rails 指南中,

:local- 默认情况下,表单提交是远程且不显眼的 XHR。使用 local: true 禁用远程提交。

更多信息 - form_with 选项

希望有帮助!