0

メンバーシップデータベース用のアプリをやっています。

それぞれの人がパートナーを持っているかもしれません。リストの表示に関しては、家族ごとに1行だけにしたいので、現時点では名を比較しており、人の名前が2番目の場合は行を表示しません。このような

person.first_name != [person.first_name, person.partner.first_name].sort[0]

つまり、各ファミリは2回ではなく、1回だけ表示されます(パートナーごとに1回)。

そして、私はビューでこれを行っています。

これを行うためのより良い方法があるはずです、そして私がデータベースレベルでそれをすることができればそれは本当に素晴らしいでしょう。それが違いを生むなら、私はpostgresqlを使用しています。

編集


不明な場合は申し訳ありません。

Person1のfirst_nameが「Edward」でPerson2のfirst_nameが「Fay」であるとします。エドワードとフェイは結婚しています。

リストに1回だけ表示したい-行を次のように表示したい

Surname     First name    Address    etc
Mysurname   Edward        ....
            Fay               

フェイとエドワードの両方がリストに含まれているので、最初にフェイと一緒に表示したくないので、質問の最初の部分でルビーを使用して、行を表示する必要があるかどうかを確認します-それは彼らを比較しますファーストネームであり、その人がパートナーのファーストネームの前にある拳の名前を持っている場合にのみ行を実行します。

これが私の人物モデルの関連部分です

class Person < ActiveRecord::Base

  has_one :relationship_link,  :foreign_key => :person_id, :dependent => :destroy, :include => :partner
  has_one :partner, :through => :relationship_link, :source => :person_b, :class_name => "Person"

私はそれがより明確であることを願っています

4

2 に答える 2

0

DISTINCT ONまたはを使用する必要がありますGROUP BY。postgresでは、選択しているすべてのものでグループ化するように注意する必要があります。姓だけを取得する必要がある場合は、次のことができselect("DISTINCT ON(last_name) last_name").pluck("last_name")ます。ただし、名前の配列のみを取得します。

次のように、テーブル内の他のすべてのフィールドで並べ替えると、レコードを取得できる可能性があります。

select("DISTINCT ON(people.last_name) people.*").order("people.last_name ASC, people.first_name ASC, people.field2 DESC, people.field3 ASC...")

結果が曖昧にならないように、すべての属性で並べ替える必要があります。

于 2012-11-09T12:40:28.470 に答える
0

この場合、特定の名前が付けられた人々のインスタンスを格納するためのデータ構造(ハッシュ)を作成します。このようなもの:

def build_surnames_hash(people_array)
  surnames_hash = {}
  people_array.each do |person|
    last_name = person.last_name
    surnames_hash[last_name] ||= []
    surnames_hash[last_name] << person
  end
  surnames_hash
end

このようにして、ハッシュを繰り返し処理し、ハッシュのキーとして保存されている名前を使用してユーザーを表示できます。

surnames_hash = build_surnames_hash(Person.all)

surnames_hash.each do |surname, person_instances_array|
  # display the surname once
  # iterate over person_instances_array displaying their properties
end
于 2012-11-09T13:19:15.293 に答える