はじめに
今回は、zipang(漢字、ひらがな、カタカナをローマ字に変換するもの)というgemを用いてタグを頭文字ごとに0~9、A~Zに振り分けて索引のようなものになるよう実装いたしました。その際、予め ancestry を用いて親カテゴリーとして0~9、A~Zをデータに保存するseedを作成しております。
機能の実行順序
大まかな流れといたしましては、
① タグを入力する
② 入力されたタグをzipangでローマ字に変換
③ 変換した文字の頭文字を取得し、その頭文字を親としてタグをその子要素に保存する。(タグのテーブルにはancestryを用いているので、知らない方は検索してみてください)
②③の流れをメソッドでまとめると以下の通りになります。(このメソッドはbefore_saveにて実行しております。)
def find_or_create_tag
self.tags = self.tags.map do |tag|
word = Zipang.to_slug tag[:name]
parent = Tag.find_by( ancestry: nil, name: word[0].upcase )
parent.children.find_or_create_by(name: tag.name)
end
end
④ 表示する際は、頭文字の子要素として出力する。
以上のことを応用すると、あいうえお順に振り分けることもできるかと思います。