Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Rails 5、Ajax、jQuery—单击按钮时增加数量_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Rails 5、Ajax、jQuery—单击按钮时增加数量

Rails 5、Ajax、jQuery—单击按钮时增加数量,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,如果用户单击“添加到购物车”按钮,我需要在我的navbar div中将数字增加1,以显示他的购物车中有多少产品 因此,我的按钮设置了remote:true navbar有一个id为count的div 我用于增加数字的函数: $('#count').html(function(i, val) { return val*1+1 }); 但如果我重新加载页面,该值将消失。我如何才能使该值保持在那里,直到执行某些操作,如“签出” 或者有更好的方法 您需要将购物车项目存储到数据库中。点击按钮, 将触发a

如果用户单击“添加到购物车”按钮,我需要在我的navbar div中将数字增加1,以显示他的购物车中有多少产品

因此,我的按钮设置了
remote:true

navbar有一个id为count的div

我用于增加数字的函数:

$('#count').html(function(i, val) { return val*1+1 });
但如果我重新加载页面,该值将消失。我如何才能使该值保持在那里,直到执行某些操作,如“签出”

或者有更好的方法

您需要将购物车项目存储到数据库中。点击按钮, 将触发ajax(
remote:true
),它将更新购物车 在数据库中计数&将返回相应的js.erb文件 这将更新导航栏中的计数


为用户创建一个model方法或helper方法,用于查找活动购物车项目的计数。因此,它也提供了准确的值

例如:

class User < ApplicationRecord
 has_many :cart_items
 def active_cart_items
   return self.cart_items.group_by(&:product_id).count #.where(status:active)  (optional)
 end
end

好吧,你需要把这个值保存在某个地方,比如在DB或cookie中。我添加你的注释作为答案,因为你展示了如何将Ruby部分输入JS的语法。我不知道(是的,现在看起来很简单…)。但我仍然需要处理这个问题,因为我正在使用此方法添加新的购物车项目:
def add\u product(product)current\u item=cart\u items.find\u by(product\u id:product.id)if current\u item current\u item.quantity+=1 else current\u item=cart\u items.build(product\u id:product.id)结束当前商品结束
所以如果用户添加了多个相同的购物车商品,它们就不是多个商品了,一些新鲜空气和rails控制台让我很开心。答案很简单:@cart.cart_items.map{i | i[:quantity]}.sum
$('#count').html("<%=@user.active_cart_items%>")