0

Я хочу сделать корзину покупок, и я создал новый класс в рельсах, который вызывает ShoppingCart. В классе у меня есть метод экземпляра, называемый total_qualtity. Я называю этот класс в поле зрения и попытаться вызвать метод экземпляра, но я получилОшибка метода класса экземпляров Rails

«NoMethodError в # По умолчанию индекс» и «неопределенный метод` total_quantity»для„#“: 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> 
+0

Вы называете это строкой, а не тележкой. –

+0

Не могли бы вы это объяснить? я не понимаю, почему он содержит строку – siliya

+0

Что-то еще помещает что-то в сеанс, и это строка. –

ответ

1

Хранить cart_id в сессии не полного объекта и получить объект ShoppingCart из этого идентификатора. ли это в контроллере

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

и передать @cart объект представления и использовать как тот

@cart.total_quantity 
+0

My ShoppingCart - это класс без ActiveRecord :: Base. Поэтому я не могу использовать метод find. – siliya

0

Вы назначаете объект как String к session[:cart_id].