Ruby歴3ヶ月のエンジニアがActiveAdminで困っていたらRansackにコントリビュートすることになった話

[Fablic Advent Calendar](http://qiita.com/advent-calendar/2015/fablic) 11日目のエントリです

Fablicにてエンジニアインターンをさせていただいている@masacandyと申します。

ActiveAdminを使って開発をしていたら、Ransackにコントリビュートすることになった話をします。

開発環境
Rails 4.2.5
ActiveAdmin 1.0.0.pre2


##ActiveAdmin

ActiveAdminとは、手軽に管理画面を扱えるようになるgemです。書き方に少しクセはありますが、その手軽さから私は重宝しております。

*ActiveAdminの導入や詳しい説明に関しては以下の記事などを参考にしてください
http://qiita.com/hkusu/items/3b0fb7f94a254e2ed6fd
http://morizyun.github.io/blog/active-admin-gem-rails/



このActiveAdminにはフィルターという機能があり、モデルを簡単に検索することができます。
http://activeadmin.info/docs/3-index-pages.html

##Translation Missingの罠

この機能を使ってドロップダウンメニューを設置し検索出来るようにしたのですが、検索ボタンを押してみると、検索状態のテーブルから、`Translation missing`というエラーが出てきました。

![Screen Shot 2015-12-10 at 9.22.12 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19432/6b03d885-9b12-dfcd-062b-8f8afd6213a1.png)

色々調べてみると、`eq, gt, lt`に対して言語設定をしているという記事をちらほら見かけました。
http://stackoverflow.com/questions/21924090/set-dropdown-search-type-default-for-active-admin-gem-sidebar-filters
https://github.com/activeadmin/activeadmin/issues/1155
http://blog.brasov.cubus.ro/2014/01/activeadmin-string-filter-removing-greater-than-less-than-contains-from-dropdows/

今回私のエラーが出ているところも`eq`なので怪しそうです。

##もうちょっと調べてみる
そもそもactive adminは`eq, gt, lt`なんて使ってないよ。と[制作者が言っています](https://github.com/activeadmin/activeadmin/issues/3866)。
<img width="900" alt="Screen Shot 2015-12-10 at 9.29.08 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/19432/ef444e38-17d3-2577-78af-7d448018f213.png">

それでは`eq`で検索されているのはなぜだろう？と思い、ActiveAdminの公式ドキュメントをもう少し注意深く見てみたら以下のように書いてありました。

```
You can also filter on more than one attribute of a model using the Ransack search predicate syntax. 
```
つまり、一つ以上の属性を検索するときは[Ransackのsearch predicate syntax](https://github.com/activerecord-hackery/ransack/wiki/basic-searching)を使ってフィルターしているとのこと。

ということはもしかして**Ransack側に英語の設定ファイルはあるけど、日本語の設定ファイルがないんじゃないか？**と仮説を立てて[Ransackのソースコード](https://github.com/activerecord-hackery/ransack)を覗いてみたら、やっぱり予想通りen.ymlはあっても、ja.ymlはありませんでした。（[インドネシア語](https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/locale/id.yml)はあった）

（[ここに](https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/locale/en.yml#L17)`eq`の翻訳がしっかりついています）

ということで試しに言語設定を英語にしてみたらエラーは出ませんでした。

![Screen Shot 2015-12-10 at 9.19.18 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19432/f5c7ef1a-7acf-7797-4bc2-7fe79531bf52.png)

これが原因だったのか...

##解決策

上記を踏まえてlocaleファイルに日本語の設定を追加してみました。

```config/locales/ja.yml
active_admin:
　　filters:
　　　　predicates:
　　　　　　eq: 等しい
```

すると、エラーは出てこなくなりました。
![Screen Shot 2015-12-10 at 9.21.13 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19432/f8312c11-e187-ae3a-91b0-f6ba4d4deeca.png)

というわけで、`Transalation Missing`のエラーが表示された場合、`/config/locale`以下に該当の翻訳設定があるかを確認してみてください。

##Ransackコントリビューターの誕生

....そして本題はここからです。

私は思いました。**むしろこれはチャンス**だと。
**あのRansackにコミットするチャンス**だと。

これはもうチャンスだと思って日本語設定ファイルを作成して[PR](https://github.com/activerecord-hackery/ransack/pull/622)出してみました。
（主述の関係が逆なのでかなり無理やりな変換になってしまいました。もし翻訳方法があればどんどん直してください）

そしてPR作成５時間後...

<img width="786" alt="Screen Shot 2015-12-10 at 9.14.00 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/19432/1eb59f9f-5b8b-d5da-4a01-e5efa1d3362b.png">

change logさえ変えてくれればマージするって速攻で返ってきた！（@jonatack、絶対日本語ちゃんと見てない）

最初はchange logってなんだかわからず、コミットをまとめろって言われてるのかと思って彼に二度手間かけさせてしまいましたが、（Sorry about it Jon）その後彼の言いたいことを理解し、[change log](https://github.com/activerecord-hackery/ransack/blob/master/CHANGELOG.md#added)に名を刻みました。

そして待つこと約15時間...

<img width="788" alt="Screen Shot 2015-12-10 at 9.14.28 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/19432/c0f932c3-4975-5ee2-e5f5-cac326a1cb03.png">

マージされた！（オープンソースへの初PRでした！！！）




こうしてRuby歴3ヶ月の若造が、あのRansackのコントリビューターの仲間入りしたのでありました。