2012-07-17 4 views
26

私はメンバーシップの配列を持っています。各メンバーシップでグループです。このメンバーシップの配列をグループ名で並べ替える必要があります。私はさまざまな方法を試みましたが、最新の方法は次のとおりです。ruby​​でsort_byを使用して配列をアルファベット順にソートするにはどうすればよいですか?

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

ただし、これは名前でソートされません。配列をランダムにソートしているようです。

  • 会員belongs_toの:グループ
  • グループにhas_many:

    [ 
        { 
        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がに等しい。これは、仕事をする - > memberships.sort_by @! {| m | m.group.id}

これはgroup.idに基づいて配列を並べるので、アルファベット順の並べ替えとは何か関係がありますか?

ご協力いただければ幸いです。

答えて

62

うわー、非常に長い時間のためにこれで苦労した後、私は私の問題は、単純なものに気づいたのです。私はgroup.nameでソートしていましたが、グループ名のいくつかは大文字で、それよりも低いものもありました。すべてを小文字に変換するとうまくいった。

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

システムがあなたに答えさせるときにあなた自身に賞を与えてください。 –

+0

となります。まだ一日待たなければならない... –

+0

ダウンケースは行く方法です+1 – earlonrails

3

ソート方法はオプションですか?

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

私もそれを試しました.. '@memberships.sort {| a、b | a.group.name <=> b.group.name} 'はまだ動作しません。 –

+0

ネスティングを忘れてしまった...親グループのキーを追加して訂正しました – Angelo

+0

これは問題です。私がa.group.nameを実行するとき、私はメンバーシップとグループテーブルの間で結合を実行しています。だから、それは結果の並べ替えに影響を与えますか?更新されたコードではまだ動作しません。 –

1

コードがどのように機能しているかわかりません。私はm.group.name

を使用して配列にハッシュをアクセスすることはできませんここで働い構文

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

ああ、私は私の質問を修正すべきだと思う。私はm.groupを行うときSQLを実行しています。 –

+0

いずれの場合でも、名前で正しくソートされません。それは無作為であるように見えます(確かに、その狂気への方法があります)。 –

関連する問題