2012-11-09 40 views
0

我正在做一個會員數據庫的應用程序。看看一個人是否在另一個字母,紅寶石,鐵軌

每個人都可能有一個伴侶。當顯示列表時,我只想爲每個家庭都有一行,所以此刻我比較名字,如果該名字是第二名,則不顯示該行。像這樣

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

這意味着每個家庭只顯示一次,而不是兩次 - 每個合作伙伴一次。

而我在視圖中這樣做。

必須有更好的方法來做到這一點,如果我可以在數據庫級別做到這一點,那將是非常棒的。我使用postgresql如果有所作爲。

編輯


很抱歉,如果現在還不清楚。

說人1有first_name「Edward」,Person 2有first_name「Fay」。愛德華和費伊結婚了。

我只想在我的列表中多次告訴他們 - 我想一排看起來像這樣

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

我不想與小仙子再次顯示它首先是因爲我有兩個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" 

的相關部分,我希望更清晰

+0

這是什麼意思「這個人的名字是第二」?而且,通過「每個伴侶一次」,你的意思是「一對一對/一對」? – sawa

+0

會員資料庫,個人,合作伙伴和家人。這很難理解你的問題。更清楚的是,如果你能將真實的關係粘貼到你的模型上。 – emrahbasman

+0

你試圖達到的結果是什麼?一個例子在這裏很有用。 – Yule

回答

0

您需要使用DISTINCT ONGROUP 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...") 

您需要通過訂購每屬性,這樣的結果是不是ambigious:

也許如果你在你的表順序,每隔領域,這樣你可以得到記錄。

+0

但是如果人們有相同的姓氏而不是合夥人呢? – Edward

+0

然後將relationship_link_id添加到DISTINCT ON,或者以類似的方式使用GROUP BY。 DISTINCT ON和GROUP BY的工作方式相似。 – mrbrdo

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 
+0

但是如果人們有相同的姓氏而不是合夥人呢? – Edward

+0

那麼,不知何故,他們的姓將會彼此區分,對嗎?無論如何,除非他們有分歧,否則你永遠不會知道...... –

相關問題