acts-as-taggable-onでのタグ処理について
acts-as-taggable-on
でのタグ付けで、大文字でタグを付けた時に、検索で表示されなかった。
その時の解決方法。
どのような症状か
例えばAというコンテンツに IMPORTANT
というタグを付けたとする。
IMPORTANT
と付けられたタグ一覧のコンテンツを取得するため
contents = Content.tagged_with("IMPORTANT")
と記述したが、 どうしても結果がnilになってしまう。
原因
発行されているSQLをよくみると
(SELECT `tags`.`id` FROM `tags` WHERE `tags`.`name` LIKE 'important' ESCAPE '!')
LIKE 検索が小文字になっていて、なおかつMySQLのBINARYがONになっているので、大文字、小文字を区別してしまうらしい。
修正
acts-as-taggable-onを見ていると
If you would like tags to be case-sensitive and not use LIKE queries for creation:
ActsAsTaggableOn.strict_case_match = true
→タグで大文字、小文字を区別するにはtrueにしてねとの事。
なので、初期設定を変えました。
vim config/initializers/acts_as_taggable_on.rb
acts_as_taggable_on.rb
ActsAsTaggableOn.strict_case_match = true
これで再起動すると、ちゃんと大文字小文字を区別して検索されました。