しまもん 

モンスターラボ島根開発拠点のブログ

【今日のgem】そのロジックはViewではなく「draper」に

ぐっち ・2015-06-04

viewテンプレートで、ActiveRecordモデルのデータを出力するとき、 テンプレートの中に表示用のロジックを書いていくと、とってもメンテナンスしにくいコードになってしまいます。

そういうときには、draperを使いましょう

drapergem/draper(https://github.com/drapergem/draper)

たとえば、price(値段)を持つ、productモデルの場合で、 値段を、~円と表示したい場合

|id| name  | price |
|1 |パソコン | 50000 |
# app/decorators/product_decorator.rb
class ProductDecorator < Draper::Decorator
  def price
    "#{object.price}円"
  end
end
# app/controllers/producst_contloller.rb
def show
  @product = Product.first.decorate
end
# app/views/products/show.html.erb
値段: <%= @product.price %>

関連テーブルも自動的にdecorateしてくれます。

class ArticleDecorator < Draper::Decorator
  decorates_association :author

  # Decoratorクラスを指定する場合は
  decorates_association :author, with: AuthorDecorator
end

helperを使うときは、hを使います

h.content_tag(:div)

| 採用情報

城下町・松江で一旗揚げたいRailsエンジニア絶賛募集中!

Blue