冒险村21 - draper

21 - Draper

上篇 Design Pattern(1) - Decorator 简单的介绍了自己生一个 decorator,不过可以发现东西会经过 helper,相对於来说个人不太喜欢,又或者是原本没有使用 decorator 将逻辑直接放在 helper 内,且 full_name 方法是没有任何 namespace 在 controller 与 view 之中。

  # app/helpers/users_helper.rb
  def full_name
    "#{first_name} #{last_name}"
  end

gem install

  # Gemfile
  gem "draper"

Writing Decorators

建立对应的 Decorator,并指要呼叫 decorate 方法就可以使用里面的方法。

  # app/controllers/user_controller.rb
  class UsersController < ApplicationController
    def show
      @user = User.find(params[:id])
      @user_decorator = @user.decorate
    end
  end
  # app/decorators/user_decorator.rb
  class UserDecorator < Draper::Decorator
    def full_name
      "#{first_name} #{last_name}"
    end
  end

View

  # show.html.erb
  <%= @user_decorator.full_name %>

其实整体东西与上一篇的概念是差不多的,不过 draper 做到更多意想不到的事情,详细也可以参考文件。

参考资料

My blog


<<:  [D21] 物件侦测(2)

>>:  [前端暴龙机,Vue2.x 进化 Vue3 ] Day27. Vue3 ref & reactive 小练习

MySQL 汇入 .sql 档案

登入 MySQL mysql -u root -p 建立空资料库 mysql > create...

Day26 - 【概念篇】Keycloak使用基本概念 - 第二部分: User & Group

本系列文之後也会置於个人网站 帐号(User) 基本讯息 接着来看看与帐号有关的设定。 在之前,已...

Unity自主学习(十七):认识Unity介面(8)

昨天研究到了"Transform"栏位里面的东东,但也没实际去测试过 所以今天打...

Day28 - Linux 编译 POC/exploit

复习:渗透测试的目的 在合法委托下,确认目标网站或系统有可利用的漏洞,若确认有目标在取得授权下,提升...

资安学习路上-渗透测试实务4

初始控制 会利用某些手段达成RCE(Remote code execution,远端代码执行),方法...