gpt4 book ai didi

ruby-on-rails-3 - 如何使用 ransack gem 搜索 Spree::Orders 和 associations

转载 作者:行者123 更新时间:2023-12-02 03:21:24 26 4
gpt4 key购买 nike

使用 Spree 和搜查,如何返回 Spree::Orders 中包含的自某个日期以来已完成的 Spree::Variants?搜索文档提供了一些关于搜索关联的建议,但似乎不够深入。

Spree::Order
has_many :line_items

Spree::LineItem
belongs_to :line_item
belongs_to :variant

Spree::Variant
has_many: line_items

可以通过以下方式搜索已完成的订单:

  o=Spree::Order.complete.ransack(completed_at_gt: '2015-05-01')

但是如何在这些订单中找到 Spree::LineItems 并在这些订单中返回 Spree::Variants 的 SKU 尚不清楚。

我正在尝试使用 ransack,因为这将用于 Spree 报告。

最佳答案

你根本不需要在这个区域使用搜查。 ActiveRecord 会让你做你需要做的事:

Spree::Order.complete.where(
Spree::Order.arel_table[:completed_at].gteq(
Date.new(2015, 10, 1)
)
).joins(
line_items: :variant
).select(:sku).distinct.pluck(:sku)

如果您必须使用 ransack,您可以使用 .result 获取 ActiveRecord 关系并应用连接等。

Spree::Order.complete.ransack(
completed_at_gt: '2015-05-01'
).result.joins(
line_items: :variant
).select(:sku).distinct.pluck(:sku)

因为你没有.pluck,你运行的是一个非常旧的 Spree 版本,它是 Rails 4 之前的版本。你可以使用以下方法获得结果:

Spree::Order.complete.ransack(
completed_at_gt: '2015-05-01'
).result.joins(
line_items: :variant
).select(:sku).map(&:sku).uniq

关于ruby-on-rails-3 - 如何使用 ransack gem 搜索 Spree::Orders 和 associations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33102365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com