尝试将数组插入列中

时间:2014-07-24 02:06:45

标签: ruby-on-rails ruby-on-rails-3

我想将每个购物车项目添加到一个列(文本框)中,但我似乎无法使用“<<”这是一个按位运算符。有没有办法为订单添加每个购物车项目,以便所有项目都显示在“产品”列中。

 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

示例代码:https://github.com/atbyrd/Bootstrapped_Devise

2 个答案:

答案 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数组执行类似的操作。希望这会有所帮助。