ActiveAdminのtable_forに渡したcollectionが勝手にdecorateされるようにする


シチュエーション

showでhas_many関係にある子要素のテーブル表示する時なんかに。

実装

module TableDecoration
  def build(obj, *attrs)
    ActiveDecorator::Decorator.instance.decorate(obj)
    super(obj, *attrs)
  end
end

module ActiveAdmin
  module Views
    class TableFor < Arbre::HTML::Table
      prepend TableDecoration
    end
  end
end

余談

もともとはalias_method_chainを使った実装を試していたのですが、メソッド名が変わる影響か、TableFor#build内で呼ぶsuperが機能しておらず、prependを使った方法に切り替えています。エラーにはならず、ただtrの中にtdがrenderされなかっただけで、詳細な理由は調査しきれていないです。