我可以在db中提取序列化数组中的特定信息,还是有更好的方法?

时间:2014-08-16 06:13:59

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

我正试图从" text"中的序列化数组中取出数据。数据库中的列。我希望做一些比在文本列中使用序列化数组更好的事情,因为我在互联网上读到很难从DB中的文本列中的序列化YAML数据中使用此代码获取数组中的确切数据:

  def create
        @product = Product.find(params[:product_id])
        @shopping_cart.add(@product, @product.price)
        redirect_to new_simcard_path
  end

  def checkout
    @order = Order.new
    @order.total = @shopping_cart.total
    @order.sub_total = @shopping_cart.subtotal
    @order.sales_tax = @shopping_cart.taxes
    @order.shopping_cart_id = @shopping_cart.id
    @order.products = []
    @shopping_cart.shopping_cart_items.each do |cart_item|
        @order.products << cart_item.item.name
        @order.products << cart_item.quantity
    end 
  end

&#34;产品&#34;基本上就是上面提到的&#34;文本&#34;列和每个项目都添加到此&#34; text&#34;以数组形式的列。但是,如果我只需要尝试仅提取&#34; cart_item.item.name&#34;由于数据在数组中被序列化,因此很难。

有没有更好的方法来解决这个问题?我希望避免在DB中使用序列化数组,如上所述。

**编辑**

只是为了解释我正在使用acts_as_shopping_cart gem并且添加产品已经包含在gem的功能中。 (添加产品添加到购物车的部分)

1 个答案:

答案 0 :(得分:0)

我建议您创建一个新模型Product,其中包含has_many :through关联。 doc

class Product < ActiveRecord::Base
  has_many :product_orders
  has_many :orders, through: :product_orders

end

class Order < ActiveRecord::Base
  has_many :product_orders
  has_many :products, through: :product_orders
end

class ProductOrder < ActiveRecord::Base
  belongs_to :order
  belongs_to :product

  # attributes
  # price, VAT, quantity, etc
end

并应用相关的迁移。

通过这种方式,您可以将每个cart_item实现为订单和产品之间的关系,并将所有易失性属性(purchase_price,VAT,折扣,数量)保留在中间模型ProductOrder中。

KISS示例:

@shopping_cart.shopping_cart_items.each do |cart_item|
  product_order = @order.products.create(product: cart_item.to_product)
  product_order.name = cart_item.item.name
  product_order.quantity = cart_item.quantity
  product_order.save
  # ...
end

会按预期为您提供@order.products