Добавить в корзину работает, но ничего не отображается в Show #Cart

#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 через онлайн-учебник.