Проверки в form_tag - PullRequest
       1

Проверки в form_tag

0 голосов
/ 30 января 2019

В моем интернет-магазине я хочу пройти проверку перед добавлением товара в корзину

моя форма order_item находится в показе товара

Я хочу заставить пользователя выбрать размер,и отобразить сообщение об ошибке , если не выбран размер?

Размер - это вложенные атрибуты товаров

Как мне его написать?

<%= form_tag clients_order_items_path, input_html: {id: "orderform"} do %>
    <%= hidden_field_tag :product_id, @product.id %>
    <%= hidden_field_tag :user_id, @token %>
    <%= hidden_field_tag :quantity, 1 %>            
    <%= select_tag :size_id, options_from_collection_for_select(@product.sizes.where('quantity >=1'), :id, :size_name), prompt: "Your Size", class: 'form-control custom-select'%>  
<%= submit_tag "Add to cart", class: "btn-main", id: "add_to_cart" %>

вот OrderItemsController с методом создания:

 def create
    @item = current_cart
    @size = Size.find(params[:size_id])

    if @size.quantity >= params[:quantity].to_i

      current_cart.add_item(
        product_id: params[:product_id],
        quantity: params[:quantity],
        size_id: params[:size_id],
      )

      redirect_to clients_cart_path
    else
      redirect_to clients_product_path(Product.find(params[:product_id]))

    end
  end

1 Ответ

0 голосов
/ 30 января 2019

Чтобы заставить пользователя выбрать один размер:

<%= select_tag :size_id, options_from_collection_for_select(@product.sizes.where('quantity >=1'), :id, :size_name), {include_blank: 'Your Size'}, required: true, class: 'form-control custom-select'%>

Это сделает обязательным select, и пользовательское сообщение браузера появится, если размер не выбран.

Если вы хотите настроить сообщение и показывает перед запросом, рассмотрите использование JS, я рекомендую https://jqueryvalidation.org/

OBS : Это хорошая практика, не выполняйте запросы к базам данных по своему усмотрению, подумайте, чтобы в вашем контроллере было указано @product.sizes.where('quantity >=1'), например:

# Inside your controller
def show
    ...
    @product_size_options = @product.sizes.where('quantity >=1')
    ...
end

и ваш select_tag:

<%= select_tag :size_id, options_from_collection_for_select(@product_size_options, :id, :size_name), {include_blank: 'Your Size'}, required: true, class: 'form-control custom-select'%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...