2013年05月26日

「あ行の記事一覧」を取得するには?

railsで辞書アプリを作ろうとしています。
よみがなの最初の文字があ行のもの一覧を取得するにはどうしたらいいでしょう
普通の文字列だったら正規表現でなんとかするんだろうけど、今やりたいのはSQLだしなあ

っていう簡単なものがなかなか実現できなくて、今までこんな黒魔術を使ってた。

cap_table = {
  "ぁ" => "a",
  "あ" => "a",
  ...
}
before_save do |record|
  record.capital = cap_table[record.reading.split(//)[0]]
end

何やってるのかって言うと、レコード一つを保存する直前によみがな列の一番最初の文字をとってきて、
その文字が何行なのかcap_tableテーブルから引いてきて、別の列に入れる、という、、、なんというか無理やりな解決法だったわけだが

今、やっとSQLで解決する方法を学んだ・・・・!遅すぎ!
  
SQLには、文字列の部分を取得するsubstrっていう関数がある。っていうことに早く気づけば一発解決したのだった。

最初の1文字目が「ぁ」より文字コードが後ろのやつ
SELECT * FROM Articles WHERE SUBSTR(READING, 1, 1) >= 'ぁ';

ここまでわかれば、あとは「ぁから「お」で始まるものをActiveRecordで求めるには

Article.find(:all, conditions: ["substr(reading, 1, 1) >= ? and substr(reading, 1, 1) <= ?", "ぁ", "お"]

これで済むってわかる。簡単だね・・・

あとは、arelでこれ組み立てれたらかっこいいんだけどな。いや、かっこいいだけで別に今でも用事はたりるんだけど。
タグ:Rails
posted by LoyalTouch at 22:05| Comment(0) | TrackBack(0) | Webプログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/363759660

この記事へのトラックバック