免责声明:我是Rails的新手。
我正在尝试做的是长篇形式:
user = Spree::User.find(2)
cart = Spree::Order.where(state: "cart", user_id: user.id)
line_item = Spree::LineItem.where(order_id: cart.last.id).map { |order| order.variant_id}
variant = Spree::Variant.find(line_item).map { |order| order.product_id }
Spree::Product.find(variant).map { |product| product.name }
它会进入数据库,找到用户,获取状态在购物车中的订单。然后去找到它的订单项。过去查找“变体”数据以找出包含哪些产品。然后到产品页面告诉我用户购物车中的所有产品。
这看起来很丑陋而且gar gar gar。你不会碰巧知道重构它的方法而不是那么多查询吗?
答案 0 :(得分:1)
如果你看Spree Order States,那不是你在不同的州有多个订单,只是一个订单可能处于一个特定的状态。
这实际上取决于Spree::User
。我找不到Spree::User
的文档和/或来源,但提及某个LegacyUser
。
因为在您提到的评论中,您有自定义构建,您需要检查Spree::User
的实际代码,看看用户是否可以拥有一个或多个订单,以及是否已有选择购物车状态订单的方法。 / p>
所以如果Spree::User
有一个订单:
order = user.order
order.variants.map(&:name)
否则:
order = user.orders.where(state: "cart")
order.variants.map(&:name)
可能有一种方法可以从代码中获取用户所需的订单。