1

我有一Person堂课,里面有很多Contact东西。这些Contact项目有一列field_name指定条目是否是电话号码、推特 ID、电子邮件地址等。对于某些人,我有许多Contact项目具有该人的不同电话号码。但是,我只需要显示最流行的一个(popularity是另一Contact列,目前它是 default_scope)。

所以我需要的是一个查询,它可以让我做类似的事情Person.find(1).contacts(:LIMIT_TO_1_PER_FIELD_NAME)

我目前正在以一种糟糕的方式执行此操作,每个 field_name 有一个查询,我确信有更好的方法可以做到这一点,但我对尝试的事情感到茫然。

非常感谢。

4

1 回答 1

0

我不完全确定我理解你的问题,但从我得到的,这样的事情怎么样:

person = Person.find(1)
person.contacts.order('popularity DESC').limit(1)

更新 这可以重构为:

#contact.rb
default_scope order('popularity DESC')    

#person.rb
def best_contact(field_name)
  contacts.where(field_type:field_name).first
end

然后调用它:

person = Person.find(1)
person.best_contact('phone')
于 2012-07-19T02:40:59.210 回答