2012-07-17 116 views
26

我有一個會員資格數組。在每個成員中是一個組。我需要按照組的名稱對這個成員資格數組進行排序。我嘗試了很多不同的方法,最新的方法是:如何在Ruby中按字母順序排序使用sort_by?

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

但是,這並不按名稱排序。它似乎是隨機排列數組。

  • 會員belongs_to的:組
  • 組的has_many:成員身份

@memberships等於:

[ 
    { 
    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 
    } 
} 
] 

注:這並不工作 - > @ memberships.sort_by! {| m | m.group.id}

它會根據group.id排序數組,所以也許它與按字母順序排序有關?

任何幫助將不勝感激。

回答

62

哇,這個掙扎極長的時間後,我意識到我的問題是一個簡單的問題。我正在按group.name進行排序,但一些組名稱是大寫字母,有些字母是較低的,這會把它全部扔掉。將所有內容都轉換爲英文,效果很好。

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

當系統允許你時,給自己一個答案。 – 2012-07-17 22:28:03

+0

會做。還得等待一天...... – 2012-07-18 14:38:22

+0

落差是要走的路+1 – earlonrails 2013-03-26 21:35:31

3

排序方法是一個選項嗎?

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

我試過,以及.. '@memberships.sort {| A,B | a.group.name <=> b.group.name}'仍然不起作用。 – 2012-07-17 21:28:40

+0

忘記嵌套...我通過添加父組密鑰更正了 – Angelo 2012-07-17 21:31:28

+0

好吧,也許這是問題 - 我沒有提到。當我做a.group.name時,我正在執行成員和組表之間的連接。那麼,這會對結果排序產生影響嗎?因爲它仍然無法使用更新的代碼。 – 2012-07-17 21:33:55

1

我看不到您的代碼是如何工作的。使用m.group.name

我無法訪問陣列中的散列這裏有一個工作的語法

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

啊,我想我應該修改我的問題。當我做m.group我在任何情況下執行一個sql加入 – 2012-07-17 21:30:46

+0

,那仍然不正確按名稱排序。它似乎是隨機的(我敢肯定,有一種方法是它的瘋狂)。 – 2012-07-17 21:38:34