29

我有一系列会员资格。每个成员都是一个组。我需要按组名对这个成员资格数组进行排序。我尝试了很多不同的方法,最新的方法是这样的:

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

但是,这不是按名称排序的。它似乎是随机排序数组。

  • 成员属于_to :group
  • 组 has_many :memberships

@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.group.id }

它将根据 group.id 对数组进行排序,所以它可能与按字母顺序排序有关?

任何帮助将非常感激。

4

3 回答 3

71

哇,在为此苦苦挣扎了很长时间后,我意识到我的问题很简单。我是按 group.name 排序的,但有些组名是大写的,有些是小写的,这一切都被抛弃了。将所有内容都转换为小写字母效果很好。

@memberships.sort_by!{ |m| m.group.name.downcase }
于 2012-07-17T21:46:11.710 回答
3

排序方法是一种选择吗?

ary.sort{ |a,b| a[:group][:name] <=> b[:group][:name] }
于 2012-07-17T21:24:17.697 回答
1

我看不出你的代码是如何工作的。我无法使用访问数组中的哈希值m.group.name

这是一个有效的语法

@memberships.sort_by!{ |m| m[:group][:name] }
于 2012-07-17T21:27:30.220 回答