Cart.new
... будет только создавать новую корзину, но не будет сохранять в базе данных. Объект Cart необходимо сохранить в базе данных, если он будет использоваться в разных запросах.
Используйте это, чтобы сохранить объект Корзина:
Cart.create(params[:cart])
или
@cart.save!
Для этого:
session[:cart] = @cart.id
... вы поступили правильно, сохранив идентификатор в сеансе :) Но учтите, что вам нужно получать его снова при каждом запросе. Таким образом, вы можете добавить помощника в свой application_controller.rb
что-то вроде:
def current_cart
Cart.find_by_id(session[:cart])
end
.... который может вернуть nil
корзину.