如何将方法添加到对对象的集合/条件进行操作的Ruby on Rails类中?

时间:2016-12-14 22:53:12

标签: ruby-on-rails ruby methods

我知道我可以创建一个实例方法来操作一个特定的类实例,一个类方法来操作类本身。我也知道我可以根据我指定的一些条件定义范围以选择一组对象。

但是,在我的情况下,我有一个字段date_of_last_approval,我想要一组初始对象(弹出窗口),然后过滤,直到找到最旧的,然后提取该字段。使用范围和AndAnd gem,我创建了一个类方法:

def self.oldest_approval_date(pops)
  oldest = pops.which_are_compliant.oldest_state_change.first
  oldest ? oldest.current_compliance_state_date : nil
end

我可以称之为x = Pop.oldest_approval_date(user.pops)

然而,在我看来,我应该能够定义一个在范围链的尾端运行的方法,所以我可以:

x = user.pops.oldest_approval_date

我发现one article似乎解决了这个问题,但我很惊讶没有更多的讨论。关于设计这样的方法的一般理念是什么?如果可以接受什么是最好的形式?

1 个答案:

答案 0 :(得分:1)

all类方法返回当前范围,以便您可以使用它。您可以使用self获得相同的效果。但最重要的是,您可以调用现有的范围,该范围也应该有效。

def self.oldest_approval_date
  oldest = which_are_compliant.oldest_state_change.first
  oldest ? oldest.current_compliance_state_date : nil
end