我想将每个购物车项目添加到一个列(文本框)中,但我似乎无法使用“<<”这是一个按位运算符。有没有办法为订单添加每个购物车项目,以便所有项目都显示在“产品”列中。
class OrdersController < ApplicationController
before_filter :extract_shopping_cart, :only => [:new, :show]
def new
@order = Order.new
@order.total = @shopping_cart.total
@order.sub_total = @shopping_cart.subtotal
@order.sales_tax = @shopping_cart.taxes
@shopping_cart.shopping_cart_items.each do |cart|
@order.products << cart.item
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @order }
end
end
def extract_shopping_cart
shopping_cart_id = session[:shopping_cart_id]
@shopping_cart = session[:shopping_cart_id] ? ShoppingCart.find(shopping_cart_id) : ShoppingCart.create
session[:shopping_cart_id] = @shopping_cart.id
end
编辑:@shopping_cart来自gem acts_as_shopping_cart
我的订单模型如下
class Order < ActiveRecord::Base
# attr_accessible :title, :body
attr_accessible :total, :sub_total, :sales_tax, :products
belongs_to :user
end
我有一个错误:
undefined method `<<' for nil:NilClass
答案 0 :(得分:0)
检查订单和产品之间的关系。您编写它的方式,看起来像订单 has_many 产品和产品可以属于许多订单。我没有看到您的订单模型中反映出来的情况。 换句话说,您必须使用has_and_belongs_to_many,例如:
class Order < ActiveRecord::Base
attr_accessible :total, :sub_total, :sales_tax, :products
has_and_belongs_to_many :products
belongs_to :user
end
class Product < ActiveRecord::Base
has_and_belongs_to_many :orders
end
guide很好地描述了它如何与图表和所有内容一起使用。
答案 1 :(得分:0)
不是将产品设为列,最好在订单和产品之间添加has_and_belongs_to_many关系,以便Rails默认具有
order.products
数组和
product.orders
数组,其中“order”和“product”指的是具有唯一ID的实例化Order或Product。这也使订单或产品过滤变得容易,因为你想要特定订单的所有产品,你可以通过做类似的事情来做到这一点
@products = Order.find(session[:some_id]).products
查找具有指定ID的订单的所有产品,您可以为products.orders数组执行类似的操作。希望这会有所帮助。