今月2つ目のgemです
activerecord-simple_index_name (0.1.0): Shorten index name https://t.co/vh4zzSYAMj
— RubyGems (@rubygems) November 29, 2015
activerecord-simple_index_name について
activerecordのデフォルトのindex名を短くするgemです
例
こんなmigrationがあった場合
create_table :user_stocks do |t| t.integer :user_id, null: false t.integer :article_id, null: false t.timestamps null: false end add_index :user_stocks, [:user_id, :article_id]
- activerecord-simple_index_name を使わない場合 :
index_user_stocks_on_user_id_and_article_id
- activerecord-simple_index_name を使った場合 :
user_id_and_article_id
カラム名だけのシンプルなindex名になります。テーブル名が長いとよく「index名が長いぞ(゚Д゚)ゴルァ!」って言われてなくなくnameを指定すると思いますが、そういうのが少なくなります。
ちなみに add_index
で生成されるindexにテーブル名が含まれているのはSQliteとの兼ね合いだった気がするのでMySQLとかで使う分にはindexにテーブル名が含まれなくても問題ないです
参考
使い方
Gemfileに書いてrequireすればmigrateした時に勝手にindex名が短くなります。RailsとPadrinoで確認済
作った経緯
- 社内勉強会でこれとは別のindex名を短くする社内gemが紹介される
- 丁度隣にその社内gemを作った人がいたので「前々からOSSにしたいって言ってたけどやんないんなら僕がやってもいいっすか?」*1と聞いて許可を貰う
- そしたら別の人から http://qiita.com/kamipo/items/6e5a1e238d7cc0611ade をオススメされる
- id:kamipo さんにgem化の許可貰ってgem作成
qiitaを見るとRails3系の実装ですが4系でも問題なく動いていました
index名が長くならないのは便利なので是非ご利用下さい
追記
Twitterで突っ込まれたので既存アプリへの投入はしばらくお待ち下さい(;´Д`)
@sue445 公開はやいわー。。 実装足りてない
— Takafumi ONAKA (@onk) November 29, 2015
@sue445 × schema.rb に差分 ◯ database に差分 なので見過ごせない差です。 optin か optout 可能な仕組みが必要で、社内でそこまでカバーしてるんだから入れて欲しかった
— Takafumi ONAKA (@onk) November 29, 2015
@sue445 include で検索だ
— Takafumi ONAKA (@onk) November 29, 2015
@sue445 ですです。逆 (デフォルト ON で除外指定できる) でもいい。
— Takafumi ONAKA (@onk) November 29, 2015
追記2
v0.2.0で対応してます
詳しくはREADMEの「Configurations」「Opt-in/Opt-out」辺りを読んで下さい
Rails 5.0.0.beta1は若干挙動怪しい(´・ω・`)
*1:2~3年前くらいに社内gemとして公開されていた