web-dev-qa-db-fra.com

Comment trier un tableau par ordre alphabétique à l'aide de sort_by en rubis?

J'ai un éventail d'adhésions. Dans chaque adhésion est un groupe. J'ai besoin de trier ce tableau d'adhésions par nom de groupe. J'ai essayé un tas de façons différentes, et la dernière est la suivante:

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

Cependant, cela ne trie pas par nom. Il semble trier aléatoirement le tableau.

  • L'adhésion appartient à: groupe
  • Groupe has_many: appartenances

@memberships est égal à:

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

REMARQUE: cela fonctionne -> @ memberships.sort_by! {| m | m.group.id}

Il ordonnera le tableau en fonction du group.id alors peut-être qu'il a quelque chose à voir avec le tri alphabétique?

Toute aide serait très appréciée.

29
Brian Weinreich

Wow, après avoir lutté avec ça pendant très longtemps, j'ai réalisé que mon problème était simple. J'étais en train de trier par group.name mais certains des noms de groupe étaient en majuscules et certains étaient plus bas, ce qui mettait tout de côté. Tout convertir en downcase a bien fonctionné.

@memberships.sort_by!{ |m| m.group.name.downcase }
70
Brian Weinreich

La méthode de tri est-elle une option?

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

Je ne vois pas comment fonctionne votre code. Je ne peux pas accéder aux hachages dans les tableaux à l'aide de m.group.name

Voici une syntaxe de travail

@memberships.sort_by!{ |m| m[:group][:name] }
1
Dty