gpt4 book ai didi

ruby-on-rails - 我如何选择包含他们的 child 的分类单元 - Spree 电子商务(Ruby on Rails)

转载 作者:行者123 更新时间:2023-12-02 01:53:00 26 4
gpt4 key购买 nike

我需要选择可用的分类单元及其子单元。

我正在使用这个自定义规则:

module Spree
class Promotion
module Rules

class TaxonPromotionRule < Spree::PromotionRule

has_and_belongs_to_many :taxon, class_name: '::Spree::Taxon', join_table: 'spree_taxons_promotion_rules', foreign_key: 'promotion_rule_id'
validate :only_one_promotion_per_product

MATCH_POLICIES = %w(any all)
preference :match_policy, :string, default: MATCH_POLICIES.first

# scope/association that is used to test eligibility
def eligible_taxons
taxon
end

def applicable?(promotable)
promotable.is_a?(Spree::Order)
end

def eligible?(order, options = {})
return false if eligible_taxons.empty?
if preferred_match_policy == 'all'
eligible_taxons.all? {|p| order.products.include_taxon?(p) }
else
order.products.any? {|p| eligible_taxons.any? {|t| t.include_product?(p)} }
end
end

def taxon_ids_string
taxon_ids.join(',')
end

def taxon_ids_string=(s)
self.taxon_ids = s.to_s.split(',').map(&:strip)
end

private

def only_one_promotion_per_product
if Spree::Promotion::Rules::TaxonPromotionRule.all.map(&:taxon).flatten.uniq!
errors[:base] << "You can't create two promotions for the same product"
end
end

end

end
end
end

和装饰器:

Spree::Taxon.class_eval do
def include_product? p
products.include? p
end
end

我希望 eligible_taxons 成为来自规则表和所有子 ID 的分类单元。因此,如果我设置一些根类别,则此规则将适用于所有子类别。我希望我的问题是可以理解和清楚的。 :)

最佳答案

找到了。对于 RoR 的新手(我)来说看起来很复杂。但这里是:

def eligible_taxons
taxon_with_childs = []
taxon.each { |t| t.self_and_descendants.each{|s| taxon_with_childs << s} }
taxon_with_childs.uniq
end

它建立新的后代和 self 列表。有关这些功能的更多详细信息,请参见此处 https://github.com/collectiveidea/awesome_nested_set/blob/master/lib/awesome_nested_set/model/relatable.rb

因为在构建此列表后,有些行是相同的并且重复了几次,我们只返回唯一的 taxon_with_childs.uniq

这可能不是性能最好的算法,但它可以满足我的需要并且非常适合数据量。

关于ruby-on-rails - 我如何选择包含他们的 child 的分类单元 - Spree 电子商务(Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699327/

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