2013-08-16 94 views
2

我如何添加添加到購物車按鈕到目錄中的每個產品? 我創建的鏈接添加到購物車按鈕目錄(紅寶石軌道,狂歡寶石)

<%= link_to fast_cart_path do %> 
    Add To Cart 
    <% end %> 

和行動,OrdersController#更新

def fast_cart 
    populator = Spree::OrderPopulator.new(current_order(true), current_currency) 
    if populator.populate(params.slice(:products, :variants, :quantity)) 
     current_order.create_proposed_shipments if current_order.shipments.any? 

     fire_event('spree.cart.add') 
     fire_event('spree.order.contents_changed') 
     respond_with(@order) do |format| 
     format.html { redirect_to cart_path } 
     end 
    else 
     flash[:error] = populator.errors.full_messages.join(" ") 
     redirect_to :back 
    end 
    end 

我沒有任何錯誤的副本,但由於某種原因,產品不添加到購物車。

回答

2

如果你看一下在施普雷:: OrderPopulator代碼: https://github.com/spree/spree/blob/v2.0.4/core/app/models/spree/order_populator.rb#L20

你會看到,它需要在變量從哈希傳入,並嘗試添加任何東西從產品通過或變體哈希。上述

你的代碼將在

params.slice(:products, :variants, :quantity) 

哪個是正確的,但是,您所指定的鏈接不添加任何產品或變向PARAMS。因此,它試圖添加任何東西,成功添加任何東西,並繼續。

你應該看一看在狂歡的代碼更新訂單:

https://github.com/spree/spree/blob/v2.0.4/frontend/app/views/spree/orders/edit.html.erb#L14

或此代碼,增加了新的產品加入購物車:

​​

如果您撬開那些人,看看那裏發生了什麼,你應該更好地瞭解如何添加產品到購物車。


另一種選擇是看施普雷API,並使用此調用添加行項目到您的訂單:

http://api.spreecommerce.com/v1/order/line_items/#creating-a-line-item

2

感謝您的指針@gmacdougall。只是想補充我如何解決它:。

1)複製部分_cart_form.html.erb(發現它在frontend/app/views/spree/products文件夾,重命名它像_quick_cart_form.html.erb這個新文件仍然應該放在同一個目錄中_cart_form.html.erb

2)包含此部分在_products.html.erb部分(在frontend/app/views/spree/shared發現 - 這部分產品通過循環並顯示它們)周圍35行包括代碼看起來應該像<%= render :partial => 'spree/products/quick_cart_form', locals: { product: product } %>

3)注意局部變量product傳遞ŧ o部分。這很重要,所以添加到購物車方法隨產品對象提供。

4)重命名的@product所有實例在新_quick_cart_form.html.erb部分只是product(匹配所提供的局部變量),並隱藏/自定義你在這個新的部分想要的任何申報單。

這應該允許您直接從產品索引頁面(例如類別頁面)將產品添加到購物車。

`

+0

這太棒了!但是既然現在我運行的是同一個模板的不同實例,那麼我該如何對js執行相同的操作,特別是products.js? –