【发布时间】:2020-01-09 16:09:04
【问题描述】:
我有一个示例类,它充当如下规则,将来它们将成为更多规则。在这种情况下,它会检查一个项目是否是保险,如果是,那么satisfied? 方法就会发挥作用:
class ItemAvailabilityRule
def applicable?(item:)
item.name == Item::INSURANCE
end
def satisfied?(bookable:, item:)
applicable?(item) && bookable.duration_in_days < 365
end
end
我有另一个类将规则应用于以下项目:
class ItemsAvailabilityPolicy
def initialize(rules: [])
@rules = rules
end
def apply(bookable:, items:)
items.map do |item|
applicable_rules = rules.select { |rule| rule&.applicable?(item: item) && rule&.applicable?(bookable: bookable, item: item) }
applicable_rules.detect { |rule| !rule.satisfied?(bookable: bookable, item: item) }
end
end
end
我认为我的 apply 方法不太正确..
我想通过这个 apply 方法实现的是,对于使用这个的单个项目:
applicable_rules = rules.select { |rule| rule.applicable?(item: item) } 会给我所有适用于该项目的规则。
然后我想检查是否至少有一个不满意的规则
我为此做了:
applicable_rules.detect { |rule| !rule.satisfied?(bookable: bookable, item: item) }
然后我想从数组中删除不满足所有适用规则的项,并返回一个仅包含满足规则的数组。我怎样才能做到这一点?
【问题讨论】:
-
所以你想选择满足所有适用规则的项目?
标签: ruby-on-rails ruby