Ruby on rails 可以接受规则数组的Ruby类

Ruby on rails 可以接受规则数组的Ruby类,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习Ruby/Rails。我目前正在学习创建模型/类 我有一个现有的类,它有这些方法 def duration (start_on..end_on).count end def items space.available_items end def available_items duration >= 365 ? items.not_including_insurance : items end 在上面的类中,我有一个名为ava

我正在学习Ruby/Rails。我目前正在学习创建模型/类

我有一个现有的类,它有这些方法

  def duration
    (start_on..end_on).count
  end

  def items
    space.available_items
  end

  def available_items
    duration >= 365 ? items.not_including_insurance : items
  end
在上面的类中,我有一个名为
available\u items
的方法,该方法检查持续时间是否超过365天,那么该项将不包括在数组中

我认为,与其将持续时间逻辑与现有类耦合,不如将其封装在另一个类中,该类可以将一系列规则应用于项

因此,在上面的类中,在
available\u items
方法中,我可以执行如下操作:

策略。应用(项目)

将返回满足规则的所有项。
将来,我可以添加更多规则并保持其灵活性。

包含
模块后,您仍然可以使用自定义规则定义
可用项
方法(并且在上游有一个通用的规则),这是一种简单的方法

至于将参数“传递”给策略,可以通过以下方式完成:

模块策略
扩展ActiveSupport::关注点
模块类方法
def my_可监控(参数)
有很多:prices,类名:'Pricing::SimplePrice',as::priceable
# ...
定义\u方法(:可用\u项){
如果参数==:foo
# ...
结束
}
结束
结束
结束
诀窍在于该方法是在类上下文中运行的,基于param,您可以以不同的方式定义方法(但请注意,在上面的示例中,
if param..
将为每个生成的方法调用运行)

include SomePolicy

my_policiable(:foo)