Rails 模型装饰 draper gem 包

lshgood · 2013年03月14日 · 最后由 lshgood 回复于 2013年04月03日 · 3075 次阅读
gem 'draper', '~> 1.0'
# app/models/article.rb

class  Article < ActiveRecord::Base
    attr_accessible :publication_status
end
# app/controllers/articles_controller.rb

def show
   @article = Article.find(params[:id]).decorate   #----
end
# app/decorators/article_decorator.rb

class ArticleDecorator < Draper::Decorator
    delegate_all

    def publication_status
        if published?
           "Published at #{published_at}"
        else
          "Unpublished"
        end
     end

    def published_at
        source.published_at.strftime("%A, %B %e")
     end
end

就可以这样用了

<%= @article.publication_status %>

非常好的例子,一看就懂

每怎么看懂,你说说它的主要用途不?

#2 楼 @simlegate

1 : 加上这个 gem 'draper', '~> 1.0' 包
2 : 在这目录建# app/decorators/article_decorator.rb
      class ArticleDecorator < Draper::Decorator
            delegate_all
            def price
                "$ 500"
            end
      end
3 : "ArticleDecorator"  跟Article model对应的。
      里面方法相当model的属性
4 : 你在查询时后面加上  .decorate
     @article = Article.find(params[:id]).decorate 
5 : 假如里面有 price 属性 值是 500 
     @article.price  # 它输出的是 "$ 500"
6 : 你在查询时没用到.decorate 
     @article.price  # 它输出的是 500
这样讲不知道你是否能看懂。

#3 楼 @lshgood very very thanks! 被你耐心打动了!!

一说 设计模式之 Decorator 装饰模式应该就知道了

#4 楼 @simlegate #5 楼 @NonTwitter 嗯。 从我不懂的角度写的这。

这个很方便,把本来在 model 层的东西拨出来了。 取值装饰了,不知道赋值可以不可以装饰的?

应用了, 很不错

这个支持 will_paginate

@lshgood 这东西用上了才知道他的好啊

#10 楼 @NonTwitter 谁用谁知道。。

刚做的一个 video 讲的就是这个

需要 登录 后方可回复, 如果你还没有账号请 注册新账号