我正试图从" 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的功能中。 (添加产品添加到购物车的部分)
答案 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
。