Ruby on Rails更新现有的订单项

时间:2018-01-26 03:54:33

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 associations model-associations

我使用模型和关联构建了各种各样的电子商务网站。

在购物车模型(每个用户独有)和产品型号(具有数量字段的各种产品)之间,我有一个行项目模型,每次用户添加产品和所需数量时,该模型生成记录。然后,新生成的行项目与特定于当前正在进行会话的用户的cart_ID相关联。

我目前面临的问题是当用户尝试将更多现有产品添加到购物车时。正如我的代码目前所示,每次用户添加相同产品时都会生成新的订单项,即使添加的产品已经包含先前生成的订单项。

如何修改表单代码以确定现有订单项是否包含要添加的产品并更新该订单项数量,而不是创建新的订单项。我猜它包含某种IF逻辑和对Line Item控制器的修改,但我称之为noob。

<%= form_for [@product, LineItem.new] do |f|%>
<%= f.label :quantity %>
<%= f.text_field :quantity, class:"form-control" %>
<%= f.submit 'Add' %>
<% end %>

2 个答案:

答案 0 :(得分:1)

在您的控制器中:

LineItem.new

并在您的视图中将@line_item更改为onKeyEvent("left", true)

显然,您需要确保用户有权访问所述订单项 - 无论是通过购物车/订单/其他方式。

值得注意的是,Rails会将表单指向控制器的更新操作,如果它是现有的LineItem,或者如果它是一个新的LineItem则指向Create。

答案 1 :(得分:0)

如果在每个表单提交后将每个LineItem记录存储在数据库中,您将在作为提交目标的控制器操作中处理此操作。像

这样的东西
line_item = LineItem.where(product:params[:product_id], cart_id:session[:cart_id]).first

if line_item
  line_item.update_attributes(quantity: line_item.quantity + params[:quantity].to_i)
else
  LineItem.create(.... #existing code
end