Я недавно читал книгу Agile на итерации E3. На этой итерации я мог «успешно» пустую корзину с правильным представлением и прошел тест, как показало учебное пособие. Однако, в rails'console, когда я проверяю Cart.all
, соответствующая корзина все еще существует; когда я нажимаю http://localhost:3000/carts/1; Я видел, что все предыдущие выбранные позиции все еще существуют. Я думал, что когда вызывается destroy, тележка и соответствующая позиция должны быть уничтожены из базы данных, но, похоже, это не так. Где я неправильно понял? Может кто-нибудь объяснить, почему это произошло? Я поместил свой исходный код в github: https://github.com/WeiliangXing/depot-rails.git Также я обнаружил, что session [: card_id] равен nil, который должен иметь что-то, потому что я использую метод set_cart в LineItemController для установки сеанса current_cart. Может ли кто-нибудь помочь мне разобраться, почему?Разбита ли корзина или нет в примере в Agile Web Development с Rails 4?
ответ
Это очень конкретный вопрос, и я думаю, если вы просто продолжал идти через учебник, вы могли бы найти ответ сами :)
Причина, почему Ваша корзина IST еще там, потому что это не удаляться. Существует охранник, который говорит «if @ cart.id == session [: id]», который никогда не возвращает true, потому что session [: id] равен нулю.
В какой-то момент вашего приложения вы должны установить сеанс [: id], я ДУМАЮ, это должно быть в def create; ...; end
, но я не читал учебник, поэтому я не хочу указывать вас на неправильный направление.
Причина, по которой ваш тест по-прежнему выглядит: вы устанавливаете сеанс [: id] в своем тесте, но никогда в своем действительном приложении.
Так, намного интереснее для вас, может быть, как отлаживать приложения рельсы:
'puts' is very usefull он будет писать вещи в вашей консоли. Итак, я сделал это:
# DELETE /carts/1
# DELETE /carts/1.json
def destroy
puts @cart.id, session[:cart_id].inspect, @cart.id.to_s == session[:cart_id]
@cart.destroy if @cart.id == session[:cart_id]
session[:cart_id] = nil
respond_to do |format|
f ormat.html { redirect_to store_url, notice: 'Your cart is currently empty.' }
format.json { head :no_content }
end
end
Который дал мне выход
1
nil
false
Использование помещает, чтобы узнать, что делает ваше приложение, и использовать .inspect, чтобы убедиться, что такие вещи, как «ноль» будет быть выписанным, а не просто пустым пространством. .
Счастливый Coding :)
Любопытно, почему сеанс [: cart_id] равен нулю? потому что я использую метод set_cart в before_action уже из LineItemController, который определен в соображениях/current_cart.rb для установки значения сеанса. Когда я нажимаю элемент для добавления; сессия должна иметь записи. – Peterxwl
Я только начал набирать огромное «как избежать такого рода проблемного учебника», но, честно говоря, я не думаю, что вам это нужно, потому что вы уже делаете учебник. Вы предоставили резервную копию для случая отсутствия тележки, поэтому каждый раз, когда нет тележки, будет создан новый. Вы изменили код учебника, потому что я не могу поверить, что учебник подскажет вам сделать это ... – Ninigi
Я строго следил за этим кодом в учебнике. Вы имеете в виду, что учебник содержит плохой код? – Peterxwl
У меня такая же проблема (В моем случае помещает предоставленный @Ninigi выводит на следующий:
Тогда я удалил to_s метод от @ cart.id.to_s == сессии [: cart_id] и получить
11
11
true
Но проблема не была исправлена, из-за курса. И я подумал, что
@cart.destroy if @cart.id == session[:cart_id]
рекурсия и я изменил уничтожить метод удалить.Теперь эта строка выглядит так:
@cart.delete if @cart.id == session[:cart_id]
И магия сделала собственную работу) Теперь мы можем уничтожить повозку без ошибок.
Я надеюсь, что это поможет кому угодно.
Спасибо!
- 1. Agile Web Development with Rails
- 2. NoMethodError в CartsController # уничтожить - Agile Web Development с Rails 4
- 3. Agile Web Development с Rails 4 - Итерационные тесты E3 Unit
- 4. Agile Web Development с Rails 3rd Edition
- 5. agile web development 4 с рельсами 4 форма заказа
- 6. Agile Web Development Smarter Card Nil проблемы
- 7. Можно ли использовать версию 4.0.2 рельсов для чтения электронной книги Agile Web Development с Rails 4?
- 8. Agile Web Development с рельсами 4 - Оформить заказ - недействительные позиции
- 9. Контроллер действия: Исключено - Agile Web Development с Rails
- 10. Agile Web Development С Rails пример отображает изображение над текстом
- 11. Понимать магический код в Agile Web Development с Rails (4-е издание)
- 12. Моделирование в Agile Development
- 13. Agile Web Development с Rails 4: Ошибка MiniTest для обновления действия в line_items_controller_test.rb
- 14. Agile Web Development w/Rails (4th e) Cart Issue
- 15. Agile Development и ESB
- 16. Agile Web Development with Rails 4 - Итерация F - Действие по уменьшению -> повторное использование уничтожения
- 17. Agile Development 101 Видео
- 18. Проблема с отображением имен пользователей в моей вспышке [: notice] - Agile Web Development With Rails - Глава 11
- 19. Agile Web Development With Rails, Iteration F4, Cart и Javascript issue
- 20. Почему мой идентификатор модуля image_url не работает? (от Agile Web Development с учебником Rails «Depot»)
- 21. Agile Web Development 4 (Глава 12) Откуда взялся массив коллекции line_items?
- 22. Agile Web Development with Rails: два (2) элемента, добавленных в корзину депо, вместо одного (1)
- 23. Реализация обратной связи в Agile development
- 24. Agile Web Development with Rails: Не удалось найти продукт с идентификатором id = 1
- 25. Rails undefined method `model_name 'для NilClass: Class, Agile web development, task G,
- 26. RoR Agile Web Dev 4 CSS не загружается
- 27. с помощью тегов в rspec для разрыва agile development
- 28. Agile Development против издания слишком рано
- 29. Jira Development - конфигурация Agile Project в версии 7.1.7 от Jira
- 30. Проверьте, нет ли iPhone 4 или нет
Не могли бы вы уточнить, что именно вы сделали? Пропустили ли вы тест, затем рельсы c => Cart.all? Это откроет консоль в среде разработки, но ваша удаленная тележка находится в тесте. – Ninigi
Я запускаю тест, он прошел; Я также запускал приложение в хроме и выполнял пустую операцию с корзиной (есть пустая кнопка/carts/1), которая показала, что тележка успешно опустела и вернулась к корню; однако после этой операции, когда я набрал адрес/тележки/1, он показывает корзину, и ее элементы все еще существуют. Также я использую консоль, чтобы проверить, есть ли тележки после вышеперечисленных операций, и да, она все еще там. Я не могу объяснить, почему. – Peterxwl