tomokiの備忘録

ITに関する簡単な備忘録です

【Ruby on Rails5】acts-as-taggable-onでタグ付けする

今回の内容

github.com

acts-as-taggable-onというタグ付けが簡単にできる(大苦戦した)gemを用いてタグ付けをしたので自分用にメモ

動作環境 

Windows10

Ruby ruby 2.4.3p205

Rails 5.1.4

acts-as-taggable-on 5.0.0

acts-as-taggable-onのインストール

Gemfileにacts-as-taggable-onを追加

初めに、Gemfileに追記します。この際Rails5以上だと

gem 'acts-as-taggable-on', github: 'mbleigh/acts-as-taggable-on', branch: 'master'

と記述しないとエラーを吐くようです。

 

必要なテーブルの作成

rails acts_as_taggable_on_engine:install:migrations

rails db:migrate

を行い、テーブルを作成します。

 

コンテンツにタグ機能を付ける

適当なテーブル(ここではContents)を作成し、それに機能を実装していきます。

 

1.Scaffoldでコンテンツを作成

rails g scaffold Content name
rails db:migrate

 

2.modelにskillsというタグリストを追加

content.rb

class Content< ApplicationRecord
acts_as_taggable_on :skills
end

 

3.フォームで入力ができるようにします

_form.html.erb

<div class='field'>
<%= f.label :skill_list, 'タグをカンマ区切りで入力' %><br/>
<%= text_field_tag 'content[skill_list]', content.skill_list.join(',') %>
</div>

 

4.コントローラーのパラメータで受け取れるようにする

contents_controller.rb

def content_params
params.require(:content).permit(:name, :skill_list)
end

 

5.画面に表示する

controller側のindexはScaffoldで生成されたもののままです。

index.html.erb

<% @contents.each do |content| %>
<tr>
<td><%= content.name %></td>
<td><%= content.skill_list %></td>
 
</tr>
<% end %>

 

これでごくごく簡単なタグ機能を作ることが出来ました!

 

参考サイト

Railsでacts-as-taggable-onを使ってタグ管理を行う - Rails Webook

https://rubyplus.com/articles/4231-Tagging-using-Acts-as-Taggable-On-in-Rails-5