プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「プレゼンター(デコレーター)」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「プレゼンター(デコレーター)」について

12.12

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

プレゼンター(デコレーター)とは?

HTMLコードを生成する役割を担うクラスでRailsコミュニティの中から生まれた概念です。viewではないですが、viewヘルパーを呼び出すことが可能になります。

デコレーターとは?

Gofのデザインパータンの一つです。以下の記事でも解説しています。(サンプルソースはJavaですが。)

【GoFのデザインパターン】「Decorator(デコレータ)」ってどんなパターン?

プレゼンターとは?

MVCから派生したMVPという概念から生まれた用語のようです。導入するとコントローラーの肥大化の防止や、テスタビリティの向上などを期待できるようです。

プレゼンターのメリット

ERB等のviewから複雑なコード部分を抽出することが可能になります。

プレゼンター機能を提供する主なGem

  • Draper
  • ActiveDecorator

別に自分で一から実装しても良いですが、上記のようなGemを利用することでコードの記述量を減らすことも可能です。

Draper

明示的にActiveRecordインスタンスのあとに.decoratorを指定する必要がある。

ActiveDecorator

ViewでActiveRecordを取り扱うときに暗黙的にデコレートしたオブジェクトが渡される。

ディレクトリ

下記のディレクトリ配下にファイルを作成します。

1
app/presenters

プレゼンターの種類

適用する部品によってプレゼンターにも様々な種類があります。

  • モデルプレゼンター
  • フォームプレゼンター

baseクラス

下記のようにbaseとなる共通クラスを作ります。view_contextからviewヘルパー(例えば、raw等の)を呼び出すことが可能になります。

1
2
3
4
5
6
7
class ModelPresenter
  attr_reader :view_context
 
  def initialize(object, view_context)
    @view_context = view_context
  end
end

継承先クラス

下記のような感じでbaseクラスを継承させてviewで使いたいメソッドを定義します。

1
2
3
4
class xxxPresenter < ModelPresenter
  def メソッド1
  end
end

view

view側では下記のように定義します。

1
<% p = xxxPresenter.new(self) %>

self

疑似変数でといい、selfによって参照されるオブジェクトをビューコンテキストと呼びます。このオブジェクトはRailsで定義された全てのヘルパーメソッドを自分のメソッドとして保持しています。

スポンサーリンク
  • 2020 12.12
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 02.06

    【Rails】「devise_for」と「devise_scope」について

  2. 2021 01.30

    【Ruby on Rails】「Enumrize」について

  3. 2020 07.18

    【Ruby on Rails】環境変数に関する知識、direnv

  4. 2018 06.19

    【Ruby on Rails】ビューテンプレート(ERB)の記述ルール

  5. 2019 12.29

    【Ruby on Rails】「bcrypt」によるログイン機能の実装

  6. 2020 03.28

    【Ruby on Rails】「Flashメッセージ」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【データベース】バッチ処理の排他制御

【データベース】「顧客テーブル」のテーブル設計

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー