2012-07-17 11 views
26

Mam szereg członkostw. W każdym członkostwie jest grupa. Muszę posortować tę tablicę członkostwa według nazwy grupy. Próbowałem wielu różnych sposobów, a najnowszy sposób jest następujący:Jak sortujesz alfabetycznie tablicę, używając sort_by w ruby?

@memberships.sort_by! { |m| m.group.name } 

Jednak nie sortuje według nazwy. Wygląda na to, że losowo sortuje tablicę. belongs_to

  • Członkostwo: grupa
  • Grupa has_many: cżłonkostwo

@memberships jest równa:

[ 
    { 
    id: 2141, 
    user_id: 491, 
    group_id: 271, 
    member_type: "member", 
    group: { 
     id: 271, 
     name: "Derek's", 
     privacy: "open", 
     bio_image_url: "/bio_images/medium/missing.png?1340285189", 
     member_count: 1, 
     upcoming_checkins_count: 0 
    } 
    }, 
    { 
    id: 2201, 
    user_id: 221, 
    group_id: 291, 
    member_type: "member", 
    group: { 
     id: 291, 
     name: "Rounded Developement", 
     privacy: "closed", 
     bio_image_url: "/groups/medium/291/bioimage.jpg?1340736175", 
     member_count: 7, 
     upcoming_checkins_count: 0 
    } 
} 
] 

UWAGA: to działa -> @ memberships.sort_by! {| m | m.group.id}

Zamówi tablicę na podstawie pliku group.id, więc może ma to coś wspólnego z sortowaniem alfabetycznym?

Każda pomoc będzie mile widziana.

Odpowiedz

62

Wow, po zmaga się z tym za bardzo długi czas, zdałem sobie sprawę, mój problem był prosty. Sortowałem według nazwy grupy, ale niektóre nazwy grup były wielkie, a niektóre z nich były niższe, co zostało zrzucone. Konwersja wszystkiego na dół działała dobrze.

@memberships.sort_by!{ |m| m.group.name.downcase } 
+1

Przyznawaj sobie odpowiedź, gdy system ci pozwoli. –

+0

Zrobi. Nadal trzeba czekać dzień ... –

+0

Downcase to sposób na +1 – earlonrails

3

Czy metoda sortowania jest opcją?

ary.sort{ |a,b| a[:group][:name] <=> b[:group][:name] } 
+0

Próbowałem również ... '@memberships.sort {| a, b | a.group.name <=> b.group.name} 'nadal nie działa. –

+0

Zapomniałem zagnieżdżenia ... Poprawiłem, dodając klucz grupy nadrzędnej – Angelo

+0

OK, może to jest problem - coś, o czym nie wspomniałem. Kiedy robię a.group.name, wykonuję sprzężenie między tabelą członkostwa i grupą. Czy miałoby to wpływ na sortowanie wyników? Ponieważ nadal nie będzie działać ze zaktualizowanym kodem. –

1

Nie widzę, jak działa twój kod. Nie mogę uzyskać dostęp do skrótów w macierzy za pomocą m.group.name

Oto składnia roboczego

@memberships.sort_by!{ |m| m[:group][:name] } 
+0

ah, myślę, że powinienem zrewidować moje pytanie. kiedy robię m.group, wykonuję sql join –

+0

w każdym przypadku, który nadal nie sortuje poprawnie według nazwy. wydaje się być przypadkowa (jestem pewien, że istnieje metoda jego szaleństwa). –

Powiązane problemy