Почему redirect_to не работает в действии создания? - PullRequest
0 голосов
/ 10 марта 2020

Rails новичок здесь, почему-то я не могу найти способ перенаправить пользователя после создания записи.

У меня есть этот контроллер:

  def create
    @product = Product.new(product_params)

    respond_to do |format|
      if @product.save
        format.html { redirect_to @product, notice: 'Product successfully created' }
      else
        format.html { render :new, notice: 'Error' }
      end
    end
  end

  def product_params
    params.require(:product).permit(:name, :description, :price, :quantity, :status, :image)
  end

Я пробовал некоторые такие варианты, как redirect_to product_path(@product) или удаление блока format, ничего не помогло. Модель и форма для представления значений, кажется, работают (проверки пройдены, записи сохранены).

Журналы:

Parameters: {"..."}
  User Load (0.2ms)  SELECT ....
  ↳ app/controllers/application_controller.rb:15:in 'admin?'
   (0.1ms)  BEGIN
  ↳ app/controllers/products_controller.rb:24:in 'block in create'
  Product Exists? (0.4ms)  SELECT 1 ...
  ↳ app/controllers/products_controller.rb:24:in 'block in create'
  Product Create (3.3ms)  INSERT INTO ...
  ↳ app/controllers/products_controller.rb:24:in 'block in create'
   (55.3ms)  COMMIT
  ↳ app/controllers/products_controller.rb:24:in 'block in create'
Redirected to http://localhost:3000/products/4137
Completed 200 OK in 65ms (ActiveRecord: 59.3ms | Allocations: 4974)

Что-то препятствует перенаправлению (у меня все еще есть сообщение notice после изменения страницы), но выглядит контроллер, форма, модель и журналы хорошо для меня Кто-нибудь имеет представление о том, что может быть здесь ответственным? Будем благодарны за любую помощь!

1 Ответ

2 голосов
/ 10 марта 2020

Если вы используете form_with помощники в Rails 6, то они по умолчанию являются XHR формами и ожидают шаблон в формате js. Чтобы они отвечали формату html, добавьте параметр local: true.

<%= form_with(model: @product, local: true) do |f| %> 

Из направляющих Rails,

:local - По умолчанию отправка формы является удаленной и ненавязчивой. XHR следует. Отключить удаленную отправку с помощью local: true.

Дополнительная информация - form_with параметры

Надеюсь, это поможет!

...