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

У меня есть эта форма для создания и обновления моего объекта продукта, но у меня возникают проблемы с получением сообщений об ошибках:

<%= simple_form_for @product do |f| %>
  <% if @product.errors.any? %>
    <div class="errors-container">
      <ul>
        <% @product.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  <%= f.input :name, label: 'Product name' %>
  <%= f.input :description, label: 'Description' %>
  <%= f.association :category, label: 'Category' %>
  <%= f.input :price, label: 'Price' %>
  <%= f.input :picture %>
  <%= f.input :picture_cache, as: :hidden %>
  <%= f.button :submit %>
<% end %>

и эти проверки в моей модели продукта:

validates :name, :description, :category, :price, presence: true

это мой контроллер:

    class ProductsController < ApplicationController
  before_action :set_product, only: [:show, :edit, :update, :destroy]
  skip_before_action :authenticate_user!, only: [:index, :show]

  def index
  end


  def show
  end

  def new
    @product = Product.new
  end

  def edit
  end

  def create
    @product = current_user.products.new(product_params)
    if @product.save
      respond_to do |format|
        format.html { redirect_to products_path, notice: 'The product was successfully created.' }
      end
    else
      redirect_to new_product_path
    end
  end

  def update
    @product.update(product_params)
    respond_to do |format|
      format.html { redirect_to product_path, notice: 'The product was successfully updated.' }
    end
  end

  def destroy
    @product.destroy
    respond_to do |format|
      format.html { redirect_to products_path, notice: 'The product was successfully destroyed.' }
    end
  end

  private
    def set_product
      @product = Product.find(params[:id])
    end

    def product_params
      params.require(:product).permit(:name, :description, :category_id, :price, :picture, :picture_cache)
    end
  end

когда я отправляю форму без поля, обязательного для проверки, я не получаю никаких сообщений об ошибках.Где я делаю не так?ОБНОВЛЕНИЕ: я поставил свой контроллер.

1 Ответ

0 голосов
/ 14 октября 2018

Поскольку вы перенаправляете в случае ошибки проверки на create, @product всегда будет новым экземпляром Product, который даже не запускался.

Вместо этого вы хотите отобразить представление действия new, чтобы снова показать форму, но без изменения страницы.Таким образом, @product передается в представление для отображения ошибок.

def create
  @product = current_user.products.new(product_params)
  if @product.save
    respond_to do |format|
      format.html { redirect_to products_path, notice: 'The product was successfully created.' }
    end
  else
    # changed the following line
    render :new
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...