1

Personは多くのアイテムを持つクラスを持っていContactます。項目には、エントリが電話番号、Twitter ID、電子メール アドレスなどであるかどうかを指定Contactする列があります。一部の個人については、その個人の電話番号が異なる多くの項目があります。ただし、最も人気のあるものだけを表示する必要があります (これは、現在 default_scope である 別の列です)。field_nameContactpopularityContact

だから私が必要としているのは、次のようなことができるクエリですPerson.find(1).contacts(:LIMIT_TO_1_PER_FIELD_NAME)

私は現在、field_name ごとに 1 つのクエリというひどい方法でこれを行っています。もっと良い方法があると確信していますが、試してみることができません。

どうもありがとう。

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 に答える