我正在实现这个购物车gem,但是在控制器中将项目添加到购物车时遇到问题。我试着使用rails console执行代码,结果运行良好。不知道我为什么从控制器得到这个错误。
错误:
ruby-on-rails - 哈希的未定义方法“add”-LMLPHP
产品控制器.rb:

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/index.html
        <% 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 %>

最佳答案

@cart = session[:active_cart]这将返回一个散列,这就是调用此函数时出现上述错误的原因:

@cart.add(@product, 99.99)

因为没有为哈希对象实现add方法。
我建议您检查控制器中的@cart对象,如下所示:
@cart = session[:active_cart]
puts @cart.inspect
puts @cart.class

然后您将看到,它是一个散列对象,您应该能够从该散列中提取所需的cart对象。
主要问题是从会话中获取正确的@cart对象。一旦你这么做了,它就应该起作用了:)

关于ruby-on-rails - 哈希的未定义方法“add”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33194960/

10-13 02:14