我有一个我正在建造的RoR定制商店,我只想尝试一些花里胡哨的东西。我有我的产品型号,哪个产品#index作为我商店的根...每个产品都有一个添加到购物车按钮。单击“添加到购物车”时,将创建一个包含数量(1)的line_item。看起来像这样。
<% @products.each do |product| %>
<%= link_to "#{product.title}", :action => 'show', :id => product %>
<%= link_to(image_tag("#{product.image_url}", :size => "200x200"), product) %>
<%= truncate product.description, length: 180 %> <%= link_to "read more", product %>
<%= button_to 'Add to Cart', line_items_path(:product_id=> product), class: "btn btn-primary" %>
<% end %>
我想添加数量选择框。在上面的代码中,我没有使用form_for或simple_form_for。为了向创建的line_item添加数量,我必须使用form_for(对吗?)所以我添加了
<%= simple_form_for(@line_item) do |f| %>
<%= f.select :quantity, [1, 2, 3] %>
<%= f.button :submit, 'Add to Cart', line_items_path(:product_id=> product), class: "btn btn-primary" %>
<% end %>
更新
<%= simple_form_for(@line_item, url:line_items_path(product_id:product)) do |f| %>
消除了参数错误......我现在的问题是数量没有更新......我知道为什么,但不确定如何修复。
根据提交按钮创建line_item时的控制器:
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
...
end
add_product方法只添加一个。我在cart.rb中定义的方法如下。
def add_product(product_id)
current_item = line_items.find_by_product_id(product_id)
if current_item
current_item.quantity += 1
else
current_item = line_items.build(:product_id => product_id)
end
current_item
end
我应该废弃该方法并将quantity =声明为表单值吗?我有点生气。
答案 0 :(得分:0)
请用单词
写下您的路径<% simple_form_for @line_item, path: line_item_path(product_Id: Product.id, method: 'POST') do %>
<%= f.select :quantity, [1, 2, 3] %>
<%= f.button :submit, 'Add to Cart', class: "btn btn-primary" %>
<% end %>
答案 1 :(得分:0)
尝试使用以下
<%= form_for(@line_item,url:line_items_path(product_id:product)) do |f| %>
<%= f.select :quantity, options_for_select([1,2,3]) %>
<%= f.submit, 'Add to Cart', class: "btn btn-primary" %>
<% end %>
有关表单助手的更多详细信息,请参阅http://guides.rubyonrails.org/form_helpers.html