helper 大家都很熟悉,不多说。
Draper 的英文介绍是 View Models for Rails,给 model 对象添加显示相关的职责,以下是自己写的两个例子。
class UserDecorator < ApplicationDecorator
decorates :user
def full_name
model.first_name + model.second_name
end
end
class ArticleDecorator < ApplicationDecorator
decorates :article
def created_at
model.created_at.to_s(:db)
end
end
假设 Article belongs_to Category 要在 view 中显示 cateogry 的连接 1、Drapper 的做法:
class ArticleDecorator < ApplicationDecorator
decorates :article
def category_name
model.category.name if model.category.present?
end
def category_link
h.link_to category_name,h.category_path(model.category) if model.category.present?
end
end
在 view 中 = @article.category_link
2、helper 的做法
module ArticleHelper
def show_category_link(article)
link_to article.category.name, category_path(article.category) if article.category.present?
end
end
在 view 中 =show_category_link(article)
哪种方法更好呢?大家对 draper 怎么看呢? 如何区分两者的适用场合呢?