产品ID显示为零

时间:2014-07-09 07:19:40

标签: ruby-on-rails mongodb mongomapper

与ROR和Mongodb合作的商业项目我只想将产品添加到购物车中,购物车正在获取其会话价值,但产品未获得product_id。

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

谢谢,请帮帮我!!!!!

2 个答案:

答案 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它将显示最后添加的产品。