`
Hooopo
  • 浏览: 336132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Draper: View Models for Rails

阅读更多
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/
2
2
分享到:
评论

相关推荐

    draper:用于Rails应用程序的DecoratorsView模型

    Draper:查看Rails的模型 Draper向Rails应用程序中添加了一个面向对象的表示逻辑层。 如果没有Draper,则此功能可能已在过程帮助器中纠结在一起或为模型增加了体积。 借助Draper装饰器,您可以使用与演示文稿相关...

    Ruby-Draper将面向对象的表示逻辑层添加到您的Rails应用程序

    class UserDecorator &lt; Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end end ``` 在这个例子中,`delegate_all`方法确保装饰器能够访问模型的所有方法,而`...

    spree_draper:在 Spree 中使用 Draper gem 而不覆盖任何内容

    spree_draper 在您的 Spree 应用程序中使用 gem,而无需覆盖任何内容。 适用于前端(用户界面)和后端(管理面板)。 安装 将 spree_draper 添加到您的 Gemfile 中: gem 'spree_draper' , github : 'naliwajek/...

    draper, Rails 应用程序的装饰/视图模型.zip

    draper, Rails 应用程序的装饰/视图模型 Draper: 查看 Rails的模型 Draper向 Rails 应用程序添加一个面向对象的表示逻辑层。没有 Draper,这个功能可能已经在程序助手中混淆,或者在模型中增加大量。 使用of装饰器,...

    draper-extensions:通过添加分页和范围方法来扩展 Draper

    德雷珀::扩展 通过添加分页和范围方法来扩展 Draper安装将此行添加到应用程序的 ...Draper::CollectionDecorator:0x000001059500f0 @context = { } , @decorator_class = EventDecorator , @object = [ #&lt;Event id:

    Applied Regression Analysis-Norman R. Draper

    应用回归分析(Applied Regression Analysis), 作者Norman R. Draper

    draper_simple_form:将 Draper 装饰器应用于 SimpleForms

    安装将此行添加到应用程序的 Gemfile 中: gem 'draper_simple_form', require: "draper/simple_form"然后执行: $ bundle用法现在,无论何时: &lt;&#37;= simple_form_for @user do |f| %&gt; &lt;&#37;= f....

    Draper to Herb-crx插件

    "Draper to Herb-crx插件"是一款专为英语(美国)用户设计的浏览器扩展程序,主要用于文本替换功能。这款插件的核心作用是自动将文本中的"kevin draper"这个词汇替换为"kevin herb"。在网页浏览、文档编辑或者任何...

    Microsoft.Press.Deploying.Microsoft.Forefront.Protection.2010.for.Exchange.Server

    ### Microsoft Press 部署 Microsoft Forefront Protection 2010 for Exchange Server #### 标题解析 - **Microsoft Press**: 微软出版社,负责出版微软官方的技术文档、指南及教程。 - **Deploying Microsoft ...

    德雷珀到草本「Draper to Herb」-crx插件

    用“凯文·赫伯”代替文本“凯文·德雷珀”。 将“凯文·德雷珀”的所有实例转换为“凯文·赫伯” 支持语言:English (United States)

    .NET Patterns: Architecture, Design, and Process

    Web service architects are sure to see enormous value in this text." —Ed Draper, Microsoft &lt;br&gt;Patterns have proven to be practical tools for the programmer who knows how to use them....

    MDS运动模拟器控制系统Thomson Venturer V-14操作手册

    - 地址:1192 E Draper Parkway #414, Draper, UT 84020 USA. - 电话:(801) 706-5939 - 传真:(801) 562-1045 - 网站:www.mds3d.com - 邮箱:info@mds3d.com 5. **产品变更声明**:MDS保留对本手册中提及的...

    gender:根据nodejs的名称统计确定一个人的性别

    guess ( 'Don Draper' ) // =&gt; { gender: 'male', // confidence: 0.9965635738831615 } gender . guess ( 'Betty Draper' ) // =&gt; { gender: 'female', // confidence: 0.9992498124531133 } gender . guess ( '...

    统计学专业毕业论文多元线性回归模型.doc

    [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)....

    numbro:一个用于数字格式化的JS库

    版权所有:copyright:2014 Adam Draper 根据MIT许可证分发。 如果您想了解更多信息,请参阅LICENSE文件。 Numeral.js的原始许可证文件可以在LICENSE-Numeraljs找到 贡献者 :sparkles: 感谢这些很棒的人():

    echo命令小解

    echo draper is winner!!!!!&gt;&gt; a.txt a.txt del a.txt ``` echo命令也可以用于输出空行,相当于输入一个回车,例如: ``` ECHO. ``` 值得注意的是命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被...

    Fundamentals of Kalman Filtering A Practical Approach 3rd

    本书由保罗·扎尔坎(Paul Zarchan)和霍华德·穆索夫(Howard Musoff)共同编写,两位作者分别来自麻省理工学院林肯实验室(MIT Lincoln Laboratory)和查尔斯·斯塔克·德雷珀实验室(Charles Stark Draper Laboratory, ...

Global site tag (gtag.js) - Google Analytics