雑草SEの備忘録

東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

Rails 5でdraperを使う(2016年8月27日現在)

Rail 5でdraper(ActiveRecordをdecorateしてくれるgem)を使おうと思ったら、少しつっかかったのでメモ。
普通に、draperと書くと、

  gem 'draper'

2.1.0がinstallされてしまう。
そうすると、rails consoleとかしたときに、

/Users/user_name/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/draper-2.1.0/lib/draper.rb:5:in `require': cannot load such file -- active_model/serializers/xml (LoadError)

のエラーが出る。
これは、 active_model/serializers/xmlがgem化されて、デフォルトではインストールされなくなったからである。

参考:
Remove XML Serialization from core by zzak · Pull Request #21161 · rails/rails · GitHub
Rails5 に Draper 導入した際にエラーが出た - Yamakichi’s blog

それで、

  gem 'activemodel-serializers-xml', git: 'https://github.com/rails/activemodel-serializers-xml'

とすると、ここの部分は抜ける。
しかし、次にこのエラーが出る。

/Users/user_name/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0/lib/action_controller/test_case.rb:49:in `initialize': wrong number of arguments (0 for 2) (ArgumentError)

記事によっては、これは、rails5のブランチから持ってこれば良いという記事もあり、これでも動く。

gem 'draper', github: 'audionerd/draper', branch: 'rails5'

あるいは、3.0.0.pre1が公開されているので、それを使えば良いだろう。

gem 'draper', '>= 3.0.0.pre1'

これでbundle installをすると、

Installing activemodel-serializers-xml 1.0.1
Installing draper 3.0.0.pre1 (was 2.1.0)

と、activemodel-serializers-xmlも入れてくれる。もうすぐrails5対応のdraperが出るであろうからこの記事の賞味期限も短いだろうけれども。。

(2016/08/28 追記)
Rails 5でDraperを使ったら、ControllerからXxxxxDecoratorが呼べなかったorz...