Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何增加购物车轨道的数量_Ruby On Rails_Ruby_Cart - Fatal编程技术网

Ruby on rails 如何增加购物车轨道的数量

Ruby on rails 如何增加购物车轨道的数量,ruby-on-rails,ruby,cart,Ruby On Rails,Ruby,Cart,我正在为咖啡馆做购物车,除了增加数量外,一切都很好。当我把一种食物加入购物车时,它只是重复同样的食物,而不是增加数量。我想做一个解决方案来检查…如果食物已经在车里了…而不是添加它只会增加数量。下面是我的控制器,它将食物添加到购物车中。任何帮助都将不胜感激 def add_to_cart add_to_session(params[:cafe], params[:food]) redirect_to about_cafe_path(Cafe.find(params[:cafe])) end

我正在为咖啡馆做购物车,除了增加数量外,一切都很好。当我把一种食物加入购物车时,它只是重复同样的食物,而不是增加数量。我想做一个解决方案来检查…如果食物已经在车里了…而不是添加它只会增加数量。下面是我的控制器,它将食物添加到购物车中。任何帮助都将不胜感激

def add_to_cart
  add_to_session(params[:cafe], params[:food])
  redirect_to about_cafe_path(Cafe.find(params[:cafe]))
end

def show_cart
  @cart = session[:cart]
end

def clear_cart
  session[:cart] = {}
  redirect_to show_cart_path
end

def remove
  destroy_food(params[:cafe], params[:food])
  redirect_to :back
end

private

def add_to_session(cafe_id, food_id)
  if session[:cart][food_id].present?
    session[:cart][cafe_id][food_id].quantity += 1
  else
    session[:cart][cafe_id].push food_id
  end
end

def destroy_food(cafe_id, food_id)
  session[:cart][cafe_id].delete food_id
end

您应该检查
if session[:cart][cafe_id][food_id]。present?
而不是
if session[:cart][food_id]。present?

无论如何都不起作用,它会给出错误“字符串未隐式转换为整数”。您现在遇到的错误
无论如何都不起作用,它会给出错误“字符串未隐式转换为整数”
是因为第一次向会话添加
食物id
时使用的是
push
,这意味着
会话[:cart][cafe\u id]
是一个数组,当您试图增加
数量时,您正试图通过
会话[:cart][cafe\u id][food\u id]将其作为散列访问,这就是为什么你会犯这样的错误。但是我没有写答案的原因是,您在会话中存储的
food\u id
整数中不存在
quantity
,因此您需要一个具有
quantity
属性的对象。