使用 Redis 和 Rails 将多个项目添加到购物车
adding more than one item to a cart using redis and rails
我一直在遵循本指南,了解如何使用Rails,Redis和Braintree API创建购物车。 http://www.sitepoint.com/build-online-store-rails/
该指南教授如何将单个电影添加到购物车,一旦将该电影添加到购物车,唯一可用的选项是将其从购物车中删除。我正在尝试使其可以在购物车中添加同一部电影的多个副本。如何实现此目标?
与电影相反,我有面板。模型、视图和控制器如下所示
panels.rb
class Panel < ActiveRecord::Base
has_many :purchases
has_many :buyers, through: :purchases
def cart_action(current_user_id)
if $redis.sismember "cart#{current_user_id}", id
"Remove from"
else
"Add to"
end
end
end
panels_controller.rb
class PanelsController < ApplicationController
before_action :logged_in_user
before_action :set_panel, only: [:show, :edit, :update, :destroy]
# GET /panels
# GET /panels.json
def index
@panels = Panel.all
end
def show
@panel = Panel.find(params[:id])
@cart_action = @panel.cart_action current_user.try :id
end
panels/show.html.erb
<p id="notice"><%= notice %></p>
<p>
<strong>Title:</strong>
<%= @panel.title %>
</p>
<p>
<strong>Location:</strong>
<%= @panel.location %>
</p>
<p>
<strong>Price:</strong>
<%= @panel.price %>
</p>
<%=link_to "", class: "btn btn-danger", data: {target: @cart_action, addUrl: add_to_cart_path(@panel), removeUrl: remove_from_cart_path(@panel)} do%>
<i class="fa fa-shopping-cart"></i>
<span><%=@cart_action%></span> Cart
<%end%>
panels.js.coffee
$(window).load ->
$('a[data-target]').click (e) ->
e.preventDefault()
$this = $(this)
if $this.data('target') == 'Add to'
url = $this.data('addurl')
new_target = "Remove from"
else
url = $this.data('removeurl')
new_target = "Add to"
$.ajax url: url, type: 'put', success: (data) ->
$('.cart-count').html(data)
$this.find('span').html(new_target)
$this.data('target', new_target)
由于我自本指南开始以来才进入 redis,任何帮助将不胜感激!
我发现实现此目的的一种方法是将面板 ID 添加到哈希中,其中键是面板 ID,数量是值:
{ panel_id => qty }
使用 HMSET:
$redis.hmset current_user_cart, panel, item_qty
这将在 current_user_cart 键下添加 key=>value 对,要检索面板 id,您可以使用 hkeys,这将检索所有哈希键:
panel_ids = $redis.hkeys current_user_cart
然后要获得数量,您可以称之为hgetall:
@cart_qtys = $redis.hgetall current_user_cart
这将返回完整的哈希值,例如 { panel_id => qty },然后您可以引用它。(应该注意的是,数量将作为字符串返回)
相关文章:
- 使用方法将扫描的项目添加到总数中
- 如何将项目添加到Highcharts图例中
- 如何将多个项目添加到列表中
- 将项目添加到动态列表
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- Yeoman/Grunt:向项目添加子目录
- 将项目添加到篮式过滤器与Splice ReactJS Javascript
- 通过Jquery将项目添加到HTML Select
- 向每个堆叠条形图项目添加链接
- 微风:将项目添加到复杂类型的数组中
- 运行并向nodejs项目添加单元测试
- React Redux将项目添加到列表中会转移到其他创建的列表中
- 谷歌表单:将项目添加到响应中
- react.js每n个项目添加一个开始标签或结束标签
- jquery appendTo将多个项目添加到一个容器中
- Javascript window.open() 多次将项目添加到购物车
- 在 ReactJs 状态上将项目添加到数组中,并超时以进行自我删除
- 如何将项目添加到选定的追加列表 jQuery
- 动态将项目添加到精彩弹出库
- 无论如何可以将项目添加到 DOM 中的现有列表中