我实现了这个购物车的宝石,但是当我将项目添加到控制器中的购物车时出现问题。我尝试使用rails console
执行代码,它工作正常。不知道为什么我从控制器收到此错误。
helper_method :add_to_cart
def add_to_cart
@cart = session[:active_cart]
@product = Product.find(params[:product_id])
@cart.add(@product, 99.99)
end
post '/add_to_cart/:product_id' => 'products#add_to_cart', :as => 'add_to_cart'
<% products.each do |product| %>
<%= button_to "Add to Cart", add_to_cart_path(:product_id => product.id), :method => :post %>
<a href="<%= addresses_path(:brand => product.brand.id, :product_id => product.id) %>" class="list-group-item">
<%= image_tag product.image.url(:square), class: "product-list-group-item" %>
<%= product.name %>
<span class="badge">$<%= number_with_precision(product.price, precision: 2) %></span>
</a>
<% end %>
答案 0 :(得分:2)
@cart = session[:active_cart]
这会返回一个哈希值,这就是为什么当你调用它时会得到上述错误的原因:
@cart.add(@product, 99.99)
因为没有为哈希对象实现add
方法。
我建议您像这样检查控制器中的@cart
对象:
@cart = session[:active_cart]
puts @cart.inspect
puts @cart.class
然后您将看到,它是一个哈希对象,您应该能够从该哈希中提取所需的cart
对象。
主要问题是从会话中获取正确的@cart
对象。一旦你这样做,它应该工作:)