Ruby on rails 3.2 购物车功能,Rails 3上的当前购物车方法定义

Ruby on rails 3.2 购物车功能,Rails 3上的当前购物车方法定义,ruby-on-rails-3.2,shopping-cart,Ruby On Rails 3.2,Shopping Cart,我对Stackoverflow是全新的,对web开发一般来说是相当陌生的。 我已经学习Rails几个月了,并开始构建一个简单的应用程序来自学 我会尽量简明扼要地说,这个应用程序是这样的:用户注册或登录,这样他就可以对自己的产品和客户执行CRUD操作。他还可以通过电话号码搜索客户,检索找到的客户或表单以创建新客户。很简单。现在,每个客户都可以下很多订单(或者叫购物车,随便你怎么称呼),这些订单存储了给定客户在给定时间购买的许多产品。 您可以在这里看到一个工作示例,其中包含模拟购物车功能,以了解它应

我对Stackoverflow是全新的,对web开发一般来说是相当陌生的。 我已经学习Rails几个月了,并开始构建一个简单的应用程序来自学

我会尽量简明扼要地说,这个应用程序是这样的:用户注册或登录,这样他就可以对自己的产品和客户执行CRUD操作。他还可以通过电话号码搜索客户,检索找到的客户或表单以创建新客户。很简单。现在,每个客户都可以下很多订单(或者叫购物车,随便你怎么称呼),这些订单存储了给定客户在给定时间购买的许多产品。 您可以在这里看到一个工作示例,其中包含模拟购物车功能,以了解它应该如何组合在一起。 用户:guest,密码:abcd1234

现在,我已经编写了第二个示例,其中介绍了目前为止我在购物车功能、行项目模型、控制器等方面所拥有的功能,为了简单起见,没有用户身份验证。 . 以下是第二个示例的模型:

class Customer < ActiveRecord::Base
  attr_accessible :name, :street
  has_many :carts
end

class Product < ActiveRecord::Base
  attr_accessible :name, :price
end

class Cart < ActiveRecord::Base
  belongs_to :customer
  has_many :line_items
  attr_accessible :purchased_at

  def total_price
    line_items.to_a.sum(&:full_price)
  end
end

class LineItem < ActiveRecord::Base
  attr_accessible :cart_id, :product_id, :quantity, :unit_price
  belongs_to :cart
  belongs_to :product

  def full_price
    unit_price * quantity
  end
end
所以你看,我的具体问题是:我如何在application\u controller.rb中定义当前的\u cart方法?我这样问是因为我从google Search(Rails的敏捷Web开发,第四版)中找到的关于购物车功能的所有资源几乎都是专门为购物车实例创建会话对象,但我发现这种方法不适合我的情况,因为我需要每个购物车只与一个特定客户关联,而不是在应用程序用户级别上进行会话

我真的希望这是一个有效的问题,对不起,如果这个问题太长,而且我目前的代表级别不允许我发布两个以上的链接,但是你可以在我的Github帐户上找到所有代码

非常感谢:)

购物车id保存在会话中。如果未引用或找到购物车,将创建一个新购物车,并将id存储在会话中。无论哪种方式,都会返回cart对象

你最终会有很多空的或陈旧的手推车。记得安排一个清理工作

附录

您的质量分配错误是由以下行引起的:

        @line_item = LineItem.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
在这里,您可以通过批量分配创建一个新的
LineItem
。在您的模型中,允许为以下对象指定质量:

  attr_accessible :cart_id, :product_id, :quantity, :unit_price
这里有一个棘手的部分:尽管Rails在内部分配ID,但它确实需要您的配置。要将批量分配给
购物车
,您需要
attr\u可访问:购物车
。所以你可以

        @line_item = LineItem.create!(:cart_id => current_cart.id, :product_id => @product.id, :quantity => 1, :unit_price => @product.price)


这两种方法都可以使用。

谢谢你的回答:)我几天前就这么做了,我想我应该在创建一个新的购物车对象之后构建一个过滤器来清空购物车会话。问题是我遇到了以下错误:无法批量分配受保护的属性:购物车、产品我的模型显示在我的原始问题中。我做错了什么?在回答中添加了大量作业解决方案谢谢!现在可以了!:)我可以看到我想要的行项目列表。我重写了一点,如下所示:def current_cart session[:cart_id]| |=cart.create!。id@current_cart | |=cart.find(session[:cart_id])end现在我正在将每个购物车与特定客户关联起来,我想我会尝试使用嵌套属性来实现这一点。现在,我想我还应该在CartsController中构建一个after_过滤器,以便在创建cart实例后将每个cart会话设置为nil。我会告诉你事情的进展。Danke schön,hab'doch viel gelernt:)
  # Shopping cart, id is in session (if any)
  def current_cart
    Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound
    cart = Cart.create
    session[:cart_id] = cart.id
    cart
  end
        @line_item = LineItem.create!(:cart => current_cart, :product => @product, :quantity => 1, :unit_price => @product.price)
  attr_accessible :cart_id, :product_id, :quantity, :unit_price
        @line_item = LineItem.create!(:cart_id => current_cart.id, :product_id => @product.id, :quantity => 1, :unit_price => @product.price)
  attr_accessible :cart, :cart_id, :product, :product_id, :quantity, :unit_price