remove_indexでnameオプションが無視される
https://github.com/mbleigh/acts-as-taggable-on
acts-as-taggable-onで使うテーブル名に、プレフィックを付けてmigrate:redoやったらdownの時にエラーになった。
Index name 'index_momiji_taggings_on_taggable_id_and_taggable_type_and_context' on table 'momiji_taggings' is too long; the limit is 64
「momiji」というプレフィックをつけたら上限を超えたみたい。
nameオプションから削除するインデックスは特定できているのになんで自動に作られるnameが出てくるのかよくわからない。
下記問題のmigrationファイル。
# This migration comes from acts_as_taggable_on_engine (originally 2) class AddMissingUniqueIndices < ActiveRecord::Migration def self.up add_index :momiji_tags, :name, unique: true remove_index :momiji_taggings, :tag_id add_index :momiji_taggings, [:tag_id, :taggable_id, :taggable_type, :context, :tagger_id, :tagger_type], unique: true, name: 'taggings_idx' end def self.down remove_index :momiji_tags, :name remove_index :momiji_taggings, name: 'taggings_idx' add_index :momiji_taggings, :tag_id add_index :momiji_taggings, [:taggable_id, :taggable_type, :context] end end
ちなみに、ActsAsTaggableOnへマッピングするテーブルを変更する場合はclass_evalやったら普通にできた。
config/initializers/とか適当におけばいい。
ActsAsTaggableOn::Tagging.class_eval do self.table_name = :momiji_taggings end ActsAsTaggableOn::Tag.class_eval do self.table_name = :momiji_tags end
プレフィックはつけないほうがいいという知見を得た。