Поиск:

Ответ в темуСоздание новой темы Создание опроса
> uninitialized constant Cart::Cartitem 
:(
    Опции темы
DimanLin
Дата 9.12.2008, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.2.2008

Репутация: нет
Всего: нет



Доброе время суток.

Сталкнулся вот стакой проблемой:

URL ошибки: http://localhost:8080/depot/store/add_to_cart/1

Код

uninitialized constant Cart::Cartitem

RAILS_ROOT: /home/diman/NetBeansProjects/depot
Application Trace | Framework Trace | Full Trace

/home/diman/netbeans-6.5/ruby2/jruby-1.1.4/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:492:in `const_missing'
app/models/cart.rb:13:in `add_product'
app/controllers/store_controller.rb:9:in `add_to_cart'



Я попробую размышлять, для своего понимания происходящего, надеюсь разобраться вместе с вами.
Ошибка "uninitialized constant Cart::Cartitem" говорит мне, что есть класс Cart(модель), в котором есть метод Cartitem, с инсалезацией которого возникла проблема. Если посмотреть в app/models/cart.rb, мы увидим строку @items << Cartitem.new(product).
Отсюда следует, что проблема возможна как то связанна с областью видимости внутри модели. т.е мы неможем создать объект Cartitem внутри Cart. 

Звучит как полная глупость. Подскажите где проблема?  smile 


Вот 3 файла, из которых 2 модели и 1 контроллер

app/models/cart.rb
Код

class Cart
  attr_reader :items

  def initialize
    @items = []
  end

  def add_product(product)
    current_item = @items.find {|item| item.product == product}
    if current_item
      current_item.increment_quantity
    else
      @items << Cartitem.new(product)
    end
  end
end



app/models/cart_item.rb
Код

class Cartitem
  attr_reader :product, :quantity

  def initialize(product)
    @product = product
    @quantity = 1
  end

  def increment_quantity
    @quantity += 1
  end

  def title
    @product.title
  end

  def price
    @product.price * quantity
  end
end


app/Controllers/store_controller.rb
Код

class StoreController < ApplicationController
  def index
    @products = Product.find_products_sale
  end

  def add_to_cart
    @cart = find_cart
    product = Product.find(params[:id])
    @cart.add_product(product)
  end

  private
  def find_cart
    session[:cart] ||= Cart.new
  end
end


PM MAIL   Вверх
fixxer
Дата 9.12.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: нет
Всего: 27



а если класс через CamelCase обозвать? 

Код

class CartItem
  #...
end


Такое ощущение, что класс не находится, а посему руби считает что (т.к. с большой буквы) это константа в классе Cart, которую тоже не находит и радостно об этом говорит smile

Добавлено через 2 минуты и 17 секунд
Просто насколько я знаю, должно быть соответствие между именем файла и именем класса.

файл: my_damn_long_class_name.rb
класс: MyDamnLongClassName

Это сообщение отредактировал(а) fixxer - 9.12.2008, 15:37


--------------------
user posted image
PM MAIL ICQ   Вверх
DimanLin
Дата 10.12.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.2.2008

Репутация: нет
Всего: нет



Да, вы правы. Заработало!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.