acts-as-taggable-on を使い込む
acts-as-taggable-on
は、アプリケーションを早く作りたいときにとても便利で context
というカラムを使うことで、tags以外にも同様なインターフェースを持つ別名のタグ
として使うことができます。
例えば、特定の値のみをフォームから登録する、という実装をしてみます。
下記コードで新たにテーブルを作成することなく、画面から Keyboard#keyswitch_types
の読み書きできるようになります。
class Keyboard < ApplicationRecord
KEYSWITCH_TYPES = {
"membrane" => 'メンブレン',
"pantograph" => 'パンタグラフ',
"mechanical" => 'メカニカル',
"capacitive" => '静電容量無接点方式',
"butterfly" => 'バタフライ',
}
acts_as_taggable_on \
:keyswitch_types,
end
= form_for @keyboard do |f|
= f.label :keyswitch_type_list
= f.select :keyswitch_type_list, Keyboard::KEYSWITCH_TYPES.map { |key, value| [value, key] }, include_blank: 'なし'
複数選択する場合のフォームの実装
= f.collection_check_boxes :tag_list, Keyboard::TAGS, :itself, :itself do |c|
label style="margin-right: 20px"
= c.check_box
= c.text
br
- 開発の初期段階だと手戻りがいくらかあることが予想できるので、
acts-as-taggable-on
で済むならテーブルの作り直しも発生しないので早く実装ができそうです。 - acts_as_taggable_on は1コンテキスト毎に1つのSELECTクエリを吐きます。
- チューニング方法としては、公式wikiに書いているキャッシュを利用するとよいと思います。
- tagsテーブルのレコードが増えるとなにか(count(*)だった気がする)のクエリでフルスキャンが走ってしまうので、無限にレコードが増えることが予想できる場合は
acts_as_taggable_on
を使わないほうがいいと思います。
-
category:
- rails