Line_items_controller
def create
@cart = current_cart
product=Product.find(params[:product_id])
@line_item = @cart.add_product(product) #bawaal
#@line_item.cart = Cart.find(session[:cart_id]) || Cart.new
#@line_item.product =Product.find(params["line_item"]["product"])
#@line_item = @cart.line_items.build(product: product)
respond_to do |format|
if @line_item.save
format.html { redirect_to @line_item.cart,
notice: 'Line item was successfully created.' }
format.json { render :show, status: :created, location: @line_item }
else
format.html { render :new }
format.json { render json: @line_item.errors, status: :unprocessable_entity }
end
end
端
商品#index.html.erb
<%= button_to 'Add to Cart', line_items_path(line_items: {product_id: @product}), remote: true, method: :post %>
购物车型号
def add_product(product_id)
current_item = line_items.find_by_product_id(product_id: product_id)
if current_item
current_item.quantity +=1
else
current_item = line_items.build(product_id: product_id)
#current_item = current_item.product.price
end
current_item
end
应用程序控制器
def current_cart
if session[:cart_id].blank?
cart = Cart.create
session[:cart_id] = cart.id
else
cart = Cart.find session[:cart_id]
end
cart
end
谢谢,请帮帮我!!!!!
答案 0 :(得分:0)
在SO上,通常有助于尽可能具体(IE向我们显示error log
等)
-
<强> PRODUCT_ID 强>
当您询问是否无法设置product_id
时,您可以多次在提供的代码中选择此项,尤其是在此处:
#app/views/store/index.html.erb
<%= button_to 'Add to Cart', line_items_path(line_items: {product_id: @product}), remote: true, method: :post %>
我相信问题可能出在您使用上面的链接向控制器发送你的参数。如果你有logs
这个,那将是惊人的,但缺乏这一点,我想突出这一点:
#config/routes.rb
resources :line_items #-> POST domain.com/line_items = create
#app/views/store/index.html.erb
<%= form_tag line_items_path do %>
<%= hidden_field_tag "product_id", @product.id %>
<%= submit_tag "Add To Cart" %>
<% end %>
or
<%= button_to "Add To Cart", line_items_path(@product) %>
这样您就可以根据需要向购物车添加任意数量的订单项 - 但是,看到您的logs
会让我们更好地帮助您解决问题!
-
<强>更新强>
你遇到的问题是你正在通过product_id
param发送给你的控制器。
由于您的控制器的create
方法使用find
:
def create
@cart = current_cart
product = Product.find params[:product_id]
end
你的参数如下:
{“authenticity_token”=&gt;“Z3MgeKE2TI9HyiOwhHZAsgjPZAAUdFWdtbNHCDYdIaY =”,“action”=&gt;“创建”,“控制器”=&gt;“line_items”}
注意你没有通过你需要的记录?
这是button_to
的标准问题 - 我们倾向于使用link_to
来更好地完成这项工作。看起来似乎this answer says the same thing
也许你想做这样的事情:
<%= link_to "Add To Cart", line_items_path(@product), method: :post %>
答案 1 :(得分:0)
购物车应该没有产品ID。它与link_item有关联。尝试使用rails控制台,Cart.last.link_item它将显示最后添加的产品。