在我的网上商店中,我想先进行验证,然后再将产品添加到购物车中
我的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
答案 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'%>