Draper是一个Ruby gem,它让Rails model方便的应用Decorator模式,解决了传统Rails的两个问题:
传统Rails Helper一点也不OO,它更像过程式的代码
Decorator给model对象添加显示相关的职责,比如,你有一个Article对象,Decorator会重载published_at方法,以格式化后的形式输出给view:
class ArticleDecorator < ApplicationDecorator
decorates :article
def published_at
date = h.content_tag(:span, model.published_at.strftime("%A, %B %e").squeeze(" "), :class => 'date')
time = h.content_tag(:span, model.published_at.strftime("%l:%M%p"), :class => 'time').delete(" ")
h.content_tag :span, date + time, :class => 'created_at'
end
end
将数据格式化相关工作从模型里解放出来
你一定在model里面写过to_xml或to_json方法。你一定担心过将渲染逻辑放到model里是否合适的问题。或者你一定在某些情况下非常渴望过在model里可以访问current_user方法。你也许遇到过这样的需求:
如果current_user是普通用户你的to_json方法只显示3个属性,如果current_user是adim,to_json方法会显示所有属性。如何在model里处理这样的逻辑?通常会把current_user当作一个参数传到model,这样虽然能解决问题,但看起来却是十分的不舒服。
如果使用Decorate,你就既可以方便的访问helper方法,又可以把与显示相关的职责从model分离出来:
class ArticleDecorator < ApplicationDecorator
decorates :article
ADMIN_VISIBLE_ATTRIBUTES = [:title, :body, :author, :status]
PUBLIC_VISIBLE_ATTRIBUTES = [:title, :body]
def to_json
attr_set = h.current_user.admin? ? ADMIN_VISIBLE_ATTRIBUTES : PUBLIC_VISIBLE_ATTRIBUTES
model.to_json(:only => attr_set)
end
end
相关资源:
Draper: View Models for Rails
http://asciicasts.com/episodes/286-draper
http://blog.steveklabnik.com/2011/09/09/better-ruby-presenters.html
http://nicksda.apotomo.de/2011/10/rails-misapprehensions-helpers-are-shit/
分享到:
相关推荐
Draper:查看Rails的模型 Draper向Rails应用程序中添加了一个面向对象的表示逻辑层。 如果没有Draper,则此功能可能已在过程帮助器中纠结在一起或为模型增加了体积。 借助Draper装饰器,您可以使用与演示文稿相关...
class UserDecorator < Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end end ``` 在这个例子中,`delegate_all`方法确保装饰器能够访问模型的所有方法,而`...
spree_draper 在您的 Spree 应用程序中使用 gem,而无需覆盖任何内容。 适用于前端(用户界面)和后端(管理面板)。 安装 将 spree_draper 添加到您的 Gemfile 中: gem 'spree_draper' , github : 'naliwajek/...
draper, Rails 应用程序的装饰/视图模型 Draper: 查看 Rails的模型 Draper向 Rails 应用程序添加一个面向对象的表示逻辑层。没有 Draper,这个功能可能已经在程序助手中混淆,或者在模型中增加大量。 使用of装饰器,...
德雷珀::扩展 通过添加分页和范围方法来扩展 Draper安装将此行添加到应用程序的 ...Draper::CollectionDecorator:0x000001059500f0 @context = { } , @decorator_class = EventDecorator , @object = [ #<Event id:
应用回归分析(Applied Regression Analysis), 作者Norman R. Draper
安装将此行添加到应用程序的 Gemfile 中: gem 'draper_simple_form', require: "draper/simple_form"然后执行: $ bundle用法现在,无论何时: <%= simple_form_for @user do |f| %> <%= f....
"Draper to Herb-crx插件"是一款专为英语(美国)用户设计的浏览器扩展程序,主要用于文本替换功能。这款插件的核心作用是自动将文本中的"kevin draper"这个词汇替换为"kevin herb"。在网页浏览、文档编辑或者任何...
### Microsoft Press 部署 Microsoft Forefront Protection 2010 for Exchange Server #### 标题解析 - **Microsoft Press**: 微软出版社,负责出版微软官方的技术文档、指南及教程。 - **Deploying Microsoft ...
用“凯文·赫伯”代替文本“凯文·德雷珀”。 将“凯文·德雷珀”的所有实例转换为“凯文·赫伯” 支持语言:English (United States)
Web service architects are sure to see enormous value in this text." —Ed Draper, Microsoft <br>Patterns have proven to be practical tools for the programmer who knows how to use them....
- 地址:1192 E Draper Parkway #414, Draper, UT 84020 USA. - 电话:(801) 706-5939 - 传真:(801) 562-1045 - 网站:www.mds3d.com - 邮箱:info@mds3d.com 5. **产品变更声明**:MDS保留对本手册中提及的...
guess ( 'Don Draper' ) // => { gender: 'male', // confidence: 0.9965635738831615 } gender . guess ( 'Betty Draper' ) // => { gender: 'female', // confidence: 0.9992498124531133 } gender . guess ( '...
[2] Draper, N. R., & Smith, H. (1998). Applied regression analysis. New York: Wiley. [3] Weisberg, S. (2005). Applied linear regression. Hoboken, NJ: Wiley. [4] Chatterjee, S., & Hadi, A. S. (2006)....
版权所有:copyright:2014 Adam Draper 根据MIT许可证分发。 如果您想了解更多信息,请参阅LICENSE文件。 Numeral.js的原始许可证文件可以在LICENSE-Numeraljs找到 贡献者 :sparkles: 感谢这些很棒的人():
echo draper is winner!!!!!>> a.txt a.txt del a.txt ``` echo命令也可以用于输出空行,相当于输入一个回车,例如: ``` ECHO. ``` 值得注意的是命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被...
本书由保罗·扎尔坎(Paul Zarchan)和霍华德·穆索夫(Howard Musoff)共同编写,两位作者分别来自麻省理工学院林肯实验室(MIT Lincoln Laboratory)和查尔斯·斯塔克·德雷珀实验室(Charles Stark Draper Laboratory, ...