2016-10-01 4 views
0

私は、ドロップダウンリスト内のレコードをソートするためのコード行を持っている:Railsの - 文字列「第九」でソートドロップダウンリスト「10日」の前に来て

<% @classrooms.order(:classroom_name).each do |classroom| %> 

それが動作しますことを除いてほとんどの時間罰金かなりの数の場合、私は、ドロップダウンリストで、次の値が設定されています

10th Grade - Smith 
11th Grade - Johnson 
12th Grade - Roberts 
9th Grade - Oneil 

問題は、システムは、次のようにして、それが最初の最初の文字でソートする必要があると仮定されていることです。

数字を別々に並べ替えて連結し直すことなく簡単に処理できますか?ありがとう。あなたはあなただけ、あなたは数字上と秩序をサブストリングはpostgresを使用することができ、指定された形式で、教室名を持っていることを確信している場合はそれを行うには

+0

教室用のRubyクラスを作成し、等級、教師などの情報を変数にすることは、より柔軟なアプローチです。 'ordinalize'を使用して、数字に「th」、「nd」、「rd」を追加することができます(ordinal)。 – Bert

答えて

0

迅速かつ汚い方法はsort_by

classrooms = ['10th', '9th', '11th', '8th'] 
=> ["10th", "9th", "11th", "8th"] 
list = %w{8th 9th 10th 11th} 
=> ["8th", "9th", "10th", "11th"] 
classrooms.sort_by { |e| list.index(e) || list.length } 
=> ["8th", "9th", "10th", "11th"] 
0

を使用することによりだろう。このように:クエリの上

@classrooms.order("(substring(classroom_name, '(^[0-9]+)'))::int") 

、10あるclassroom_names最初の数字の部分文字列で検索結果を注文する11、12、9

しかし、私は列を分割することをお勧めしますなどの新しいコラムをご紹介しますされますグレード。あなたのclassroom_nameには単なる名前以外の情報が含まれているためです。

関連する問題