PeaceJet

証券会社で証券外務員をやりながら、マーケティングやデータ分析・UI/UX改善などを行っています。

【Ruby on Rails】Acts_as_Taggable_onで結構ハマったはなし


f:id:PeaceJet:20180303172416p:plain

最近、Ruby on Railsを使用したWebアプリケーションの開発を行っております。

その中で、タグ機能を実装するためにActs_as_Taggable_onというGemパッケージを使用したのですが、結構ハマってしまったので共有します。
もし、的外れなことを言っているなと思った方がいれば指摘していただけると助かります。

環境は以下のとおりです。

名称 バージョン
Windows 10
Ruby 2.2.6
Rails 5.1.4

そのいち

マイグレーションが通らない。

StandardError: An error has occurred, this and all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

class RolifyCreateRoles < ActiveRecord::Migration[4.2]
/Users/brandoncordell/Code/dsk_group/db/migrate/20170307143104_rolify_create_roles.rb:1:in `'
/Users/brandoncordell/Code/dsk_group/bin/rails:9:in `require'
/Users/brandoncordell/Code/dsk_group/bin/rails:9:in `'
/Users/brandoncordell/Code/dsk_group/bin/spring:15:in `'
bin/rails:4:in `load'
bin/rails:4:in `

'
StandardError: Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

class RolifyCreateRoles < ActiveRecord::Migration[4.2]
/Users/brandoncordell/Code/dsk_group/db/migrate/20170307143104_rolify_create_roles.rb:1:in `'
/Users/brandoncordell/Code/dsk_group/bin/rails:9:in `require'
/Users/brandoncordell/Code/dsk_group/bin/rails:9:in `'
/Users/brandoncordell/Code/dsk_group/bin/spring:15:in `'
bin/rails:4:in `load'
bin/rails:4:in `

'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

上記のようなエラーです。
意味的には、ActiveRecord::Migrationから直接継承することはサポートされていませんので、Railsバージョンが指定されたマイグレーションファイルを書いてくおくんさい。
ということだと思います。

したがって、以下のように修正しました。

#修正前
Class RolifyCreateRoles < ActiveRecord::Migration
end
#修正後
Class RolifyCreateRoles < ActiveRecord::Migration[5.0]
end

以下のサイトを参考にしました。
github.com

そのに

これもまた、マイグレーション作業時のエラーです。

igrating to AddMissingUniqueIndices (**************)
== AddMissingUniqueIndices: migrating ========================================

    • add_index(:tags, :name, {:unique=>true})

PG::UniqueViolation: ERROR: could not create unique index "index_tags_on_name"
DETAIL: Key (name)=(???) is duplicated.
: CREATE UNIQUE INDEX "index_tags_on_name" ON "tags" ("name")
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

上記のようなエラーです。
私のログが残っていないので、引用させていただきました。
マイグレーションスクリプトの中に、2度、同じカラムを追加をする項目があるようで、それが悪さをしているようです。
「すでにカラムが存在していますので作ることができません」というエラー内容なので、マイグレーションスクリプトの該当部分をコメントアウトすることで解消できました。

そのさん

これが、どうにもならないエラーでした。

NoMethodError (super: no superclass method `quote_value' for #
Did you mean? quote_bound_value):

tackeyy.com
このコミュニティーの会話の中で、gemパッケージの最新版を使ってみては?という流れなのですが、Rubyのバージョンをイジれないので良い案がないかといった会話がありました。
しかし、その後に続く人がおらず、おそらく解決策がないんだろうなぁということで完全にお手上げ状態になっていまいました。

-gem 'acts-as-taggable-on', '~> 4.0'
 +gem 'acts-as-taggable-on', github: 'mbleigh/acts-as-taggable-on', branch: 'master'

以下の記事を参考にさせていただきました。
tackeyy.com

ここで注意なのは、最新版のgemパッケージは、Rubyバージョンが2.2.7以上でないと動作しないということです。

> bundle install

上記コマンドを実行すると、Rubyのバージョンを変更してくださいと警告が出て落ちます。

結果的に、Rubyのバージョンを上げることにしました。

Ruby 2.2.6 から 2.3.3 へバージョン変更。
現状では 2.5 まであるのですが、大幅なバージョンアップによってもたらされるリスクを避けたかったので、2.3にしましたといったら怒られると思いますが、スピードを優先したいという思いがあり苦肉の策として採用しました。
開発環境を作り直すハメになるとは思わなかったのですが、いい勉強になりました。

結論

Rubyのバージョンは、2.2.7以上を使うようにしましょう。

/* ブログタイトルを取得 */