環境
-
Rails 5.0.2
-
ruby 2.2.6p396 (2016-11-15 revision 56800) [x86_64-darwin15]
概要
-
Railsアプリケーションにタグ管理機能を作成するgem
-
動的なタグ生成を助ける
-
tags
という名称以外にもskills
などで使用できる
GitHubのURL
https://github.com/mbleigh/acts-as-taggable-on
インストール
Gemfileに以下の記述を追加します。
gem 'acts-as-taggable-on'
bundle実行。
$ bundle install --path vendor/bundle
MySqlを使用している場合、以下を追加で実行するする必要があるそうです。
$ rake acts_as_taggable_on_engine:tag_names:collate_bin
必要なテーブルを生成します。
$ rake acts_as_taggable_on_engine:install:migrations
$ rake db:migrate
使用するための準備
タグをつけたいモデルに以下を追加。
# モデルに記述
class User < ActiveRecord::Base
acts_as_taggable
acts_as_taggable_on :skills, :interests
end
# コントローラーに記述
class UsersController < ApplicationController
def user_params
params.require(:user).permit(:name, :tag_list)
end
end
これらの意味は、acts_as_taggable
がacts_as_taggable_on :tags
のエイリアスとなっていて、
acts_as_taggable_on :skills, :interests
によって@user.skill_list
などを使用可能にしている
実際は、使用したいタグだけを登録すればよいです。
今回はtagsを使用するため、モデルの部分を以下のように記述します。
class User < ActiveRecord::Base
acts_as_taggable
end
使用方法
タグの追加と削除の仕方は次のような方法で出来ます。
@user = User.new(name: 'poyo')
@user.tag_list.add('awesome') # タグを追加
@user.tag_list.remove('awesome') # タグを削除
引数を複数指定することで一度に追加削除もできる
@user.tag_list.add("awesome", "slick")
@user.tag_list.remove("awesome", "slick")
表画面の記述
フォーム作成
# フォームのスタイルにBootstrapを使用
<%= form_for(@user) do |f| %>
<div class="form-group">
<%= f.label :user, :name %>
<%= f.text_field :name, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :user, :tag_list %>
<%= f.text_field :tag_list, value: @user.tag_list.join(','), class: "form-control" %>
</div>
<div class="pull-right">
<%= f.submit '登録する', class: "btn btn-info" %>
</div>
<% end %>
これで、コンマ区切りで入力したタグを登録することができるようになります。
bootstrap tags input
を使用すると、もっと入力しやすいフォームに変更することも出来ます。
また追記か他の記事で実装して詰まった部分など書くかもしれません。