今更ながらにDraper gemでActiveRecord Associationをdecorateします。
ほんと少しでも迷ったらまず、ドキュメントちゃんと読むべきだった恥ずかしい。。。
TL;DR
Draper::CollectionDecorator使いましょう
今までやっていたような事
article modelにkaminari gemでpagenationを加え、titleをCapitalizeするdecorateしてみる例
# article_decorator.rb
class ArticleDecorator < Draper::Decorator
delegate_all
def title
object.title.capitalize
end
end
そんでもって
# controller
@articles = Article.all.page page[:page]
# hamlとかでview
@articles.each do |article|
- article.decorate
= article.title
みたいなことやってた。collection回す中でわざわざdecorateしてた。
はずかしい。
associationにはDraper::CollectionDecoratorを使おう
association用のdecoratorを作る
# articles_decorator.rb
class ArticlesDecorator < Draper::CollectionDecorator
delegate :current_page, :total_pages, :limit_value
end
これで各々のactiveReocrd modelもそれぞれdecorateされます。
あぁ恥ずかしい。。。