@clients
という大規模なセットがありますが、クライアントの姓でソートしたいのですが、動作させることができません。クエリを高速化するにはselect
:name
と:id
が必要です。Railsはカスタムメソッドでソートします
@clients = Client.all.select(:name, :id)
@clients.sort { |a, b| a.name && b.name ? a.name.split(" ").last[0] <=> b.name.split(" ").last[0] : a ? -1 : 1}
私が得る結果は次のとおりです。
#<ActiveRecord::Relation [#<Client id: 460, name: "Jim Jimmy">, #<Client id: 440, name: nil>, #<Client id: 231, name: "Paigetest Doyle">, #<Client id: 441, name: "Jeremy Lopez">, #<Client id: 462, name: "blah blah">, #<Client id: 348, name: "Jan Aldrich">, #<Client id: 464, name: "fefw fewfew">, #<Client id: 466, name: nil>, #<Client id: 67, name: "Jeremy Lopez">, #<Client id: 449, name: nil>, ...]>
エラーはどうなりますか?あなたはどんな結果を得ますか? –
データベースに 'order'を使って並べ替えをさせるべきです。 ActiveRecord :: Relationに 'sort'を使用しないでください。特にスピードが懸念される場合は注意してください。また:http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ –
しかし、姓はテーブルの列ではありません。私はループとして –