Поднимите ошибку вместо ошибок перенаправления и прошивки - PullRequest
0 голосов
/ 07 сентября 2018

Когда я заполняю неправильную проверку формы - она ​​вызывает ошибку (экран включен ниже) вместо перенаправления на new_product_path и высвечивает все ошибки. Если я правильно использую форму со всеми пройденными валидациями, она работает нормально, и перенаправляет меня на index . Также продукт принадлежит_пользователю и пользователю has_many: продукты.

%h1 Products
=form_with scope: :product, url: products_path, local: true do |p|
  -if @product.errors.any?
    =pluralize(@product.error.count, 'error')
    prohibited this product from being saved: 
    %ul
      =@product.errors.full_messages.each do |msg|
        %li
          =msg
  %div
    =p.label :product_name
    %br
    =p.text_field :product_name
  %div
    =p.label :description
    %br
    =p.text_field :description
  %div
    =p.submit 'Create'

Контроллер:

class ProductsController < ApplicationController
  def index
  end

  def new
    @product = Product.new
  end

  def create
        @product = Product.create(product_params)

        if @product.save!
            flash[:notice] = "New product create"
            redirect_to products_index_path
        else
            flash.now[:alert] = "Something Gone wrong"
            render new_product_path
        end
  end

  def update
  end

  def delete
  end

    private
    def product_params
        params.require(:product).permit(:product_name, :description)
    end
end

Модель:

class Product < ApplicationRecord
    belongs_to :user
    validates :product_name, uniqueness: true,
                    format: { with: /[A-Z]{3}[-][1-9]{3}/ }

    validates :description, presence: true,
                       length: { minimum: 5 }
end

enter image description here

1 Ответ

0 голосов
/ 07 сентября 2018

Проблема была @product.save!. Мне пришлось использовать save вместо save!.

def create
  @product = Product.create(product_params)

  if @product.save     # <-- Here
    flash[:notice] = "New product create"
    redirect_to products_index_path
  else
    flash.now[:alert] = "Something Gone wrong"
    render new_product_path
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...