Rails实例方法类错误

时间:2015-04-30 10:26:16

标签: ruby-on-rails ruby ruby-on-rails-4 shopping-cart instance-methods

我想制作一个购物车,并且我已经在调用ShoppingCart的rails中创建了一个新类。在类中我有一个名为total_qualtity的实例方法。 我在View中调用此类并尝试调用实例方法,但我得到了

" NoMethodError默认#index" "未定义的方法`total_quantity' for"#":String" 。请帮我修理一下。

这是我的ShoppingCart.rb

class ShoppingCart
attr_accessor :items
def initialize items = Hash.new
    @items = items
end

def total_quantity
    total = 0
    @items.each do |key, value| 
        total += value.to_i
    end
    return total
end

这是我的DefaultView.html.erb

<% @cart = session[:cart] || ShoppingCart.new
  session[:cart] = @cart
  puts session[:cart].total_quantity  --> This is place i got error
%>
<div id="header" class="container">
<nav class="navbar navbar-default">
<div class="navbar-header col-sm-4 col-md-3">
  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <a class="navbar-brand" href="#"><%= image_tag 'logo.png'%></a>
</div>
</nav>
</div>

2 个答案:

答案 0 :(得分:1)

将cart_id存储在session not complete对象中,并从该id检索ShoppingCart的对象。 在控制器中执行此操作

Eg: session[:cart_id] 
@cart  = ShoppingCart.find(session[:cart_id])

并将@cart对象传递给视图并使用那样的

@cart.total_quantity

答案 1 :(得分:0)

您要将对象指定为String的{​​{1}}。