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


Fablic Advent Calendar 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というエラーが出てきました。

色々調べてみると、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なんて使ってないよ。と制作者が言っています

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

You can also filter on more than one attribute of a model using the Ransack search predicate syntax. 

つまり、一つ以上の属性を検索するときはRansackのsearch predicate syntaxを使ってフィルターしているとのこと。

ということはもしかしてRansack側に英語の設定ファイルはあるけど、日本語の設定ファイルがないんじゃないか?と仮説を立ててRansackのソースコードを覗いてみたら、やっぱり予想通りen.ymlはあっても、ja.ymlはありませんでした。(インドネシア語はあった)

ここにeqの翻訳がしっかりついています)

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

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

解決策

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

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

すると、エラーは出てこなくなりました。

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

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

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

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

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

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

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

最初はchange logってなんだかわからず、コミットをまとめろって言われてるのかと思って彼に二度手間かけさせてしまいましたが、(Sorry about it Jon)その後彼の言いたいことを理解し、change logに名を刻みました。

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

マージされた!(オープンソースへの初PRでした!!!)

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