ActiveDecoratorはとても便利ですね。modelにview専用のメソッドを追加することができるので、変なヘルパーメソッドとか作らないで済むし、テストもやりやすいので捗ります。
module UserDecorator def show_hoge "これはダミーの#{hoge}です" end end
今作っているシステムはDeviseでユーザー認証、cancanで権限管理を作っているので、viewで使えるcurrent_userにもActiveDecorator効いてるので便利やなと思っていたのですが、あるパターンでそれが効かないのがわかりました。cancanのチェックを外した部分です。
class PagesController < ApplicationController skip_authorization_check end
どうもこれっぽい気がしてならない(違う可能性もある)。
たとえskip_authorization_checkをしても、普通にcurrent_userはviewで使えるのだが、デコレートだけされていない模様。対処方法がわからなかったので、とりあえず力技で対応してしまった。
- ActiveDecorator::Decorator.instance.decorate current_user = current_user.show_hoge
回避策がわかり次第、この汚いソースを抹殺したい。