Deviseのcurrent_userにActiveDecoratorが効かないパターンがあった

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

回避策がわかり次第、この汚いソースを抹殺したい。


カテゴリー Ruby, Ruby on Rails | タグ    | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です