form_tag中的验证

时间:2019-01-30 14:47:59

标签: ruby-on-rails ruby forms

在我的网上商店中,我想先进行验证,然后再将产品添加到购物车中

我的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 :(得分:1)

强制用户选择一种尺寸:

<%= 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'%>