#ruby-on-rails
#ruby-on-rails
Вопрос:
Вот моя cart.rb
модель
class Cart < ActiveRecord::Base
has_many :tutors
def current_cart
if session[:cart_id]
@current_cart ||= Cart.find(session[:cart_id])
end
if session[:cart_id].nil?
@current_cart = Cart.create!
session[:cart_id] = @current_cart.id
end
@current_cart
end
def add_tutor(tutor_id)
tutor = Tutor.find(tutor_id)
if tutor
self.tutors << tutor
end
save
end
end
И вот мой carts_controller.rb
class CartsController < ApplicationController
def show
@cart = current_cart
end
def checkout
@cart = current_cart
name = params[:checkout][:your_name]
email = params[:checkout][:your_email]
message = params[:checkout][:your_hp]
ApplicationMailer.checkout(@cart, name, email, message).deliver
flash[:success] = "We have received your request and will be in touch with you shortly!"
redirect_to root_path
end
def add_to_cart
@cart = current_cart.add_tutor(params[:tutor_id])
if @cart
flash[:success] = "You have successfully added the tutor to your cart!"
redirect_to tutors_path
else
flash[:danger] = "Oops! Something went wrong. Please try again!"
redirect_to root_path
end
end
end
И вот кнопка для функции добавления в корзину
<%= button_to "Shortlist Tutor", add_to_cart_path(:tutor_id => tutor.id), :method => :post %>
Функция добавления в корзину, похоже, работает нормально, поскольку она перенаправляет меня на правильную страницу, и никаких ошибок или чего-либо подобного, похоже, не появляется. В моей консоли rails я вижу на сервере, что отката нет.
Processing by CartsController#add_to_cart as HTML
Parameters: {"authenticity_token"=>"da3XDg69FSCrEyn39v8Apty4aX40TJH85BeW49x/4R3MElKYxip1w7rpbWRBYj5hhZDAivf7Bxn4FK1dkHyKpg==", "tutor_id"=>"3"}
Cart Load (0.2ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ? LIMIT 1 [["id", 12]]
Tutor Load (0.3ms) SELECT "tutors".* FROM "tutors" WHERE "tutors"."id" = ? LIMIT 1 [["id", 3]]
(0.1ms) begin transaction
(0.1ms) commit transaction
(0.1ms) begin transaction
(0.1ms) commit transaction
Вот что я вижу на сервере. Я действительно не совсем уверен, почему я ничего не вижу, когда перехожу к просмотру «Мои тележки #показать».
Был бы признателен за любую помощь, которую я могу получить. Спасибо!
Ответ №1:
Проверьте, что вы получаете в params[:tutor_id] .
Глядя на выполняемые операторы SQL, не похоже, что он вообще сохраняется при вызове add_to_cart. Он выполняет только ВЫБОР в корзинах и tutor.
Комментарии:
1. как мне проверить, что я получаю в параметрах [:tutor_id]?
2. Ну, существует так много методов отладки, но самым простым методом было бы просто сделать
puts params[:tutor_id]
3. Похоже, я получаю tutor_id выбранного tutor. При нажатии возвращается значение ‘3’.
Parameters: {"authenticity_token"=>"os fPD6P9SaeyhqeKVxh9as 2GrXwbPn5scfOwWyhqwbcBqq9hiVxY8wXg2ewV8y8hZxnhR2JQL6xCSFSbHtFw==", "tutor_id"=>"3"} Cart Load (0.3ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ? LIMIT 1 [["id", 12]] Tutor Load (0.3ms) SELECT "tutors".* FROM "tutors" WHERE "tutors"."id" = ? LIMIT 1 [["id", 3]] (0.1ms) begin transaction (0.1ms) commit transaction (0.1ms) begin transaction (0.1ms) commit transaction 3
4. немного запутался в том, как задан current_cart … у вас есть другой вспомогательный метод для этого — возможно, из установленного gem?
5. Нет, я не использую никаких других драгоценных камней. Я следовал методу current_cart через онлайн-учебник.