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...