🙄
Rails 7 で Presenter の導入でハマった
この書籍に記載のある Presenter の機能を Rails7 で導入しようとしたが、書籍どおりの記述で上手くいかなかったのでメモ。
Ruby on Rails 6 実践ガイド impress top gearシリーズ | 黒田 努 | 工学 | Kindleストア | Amazon
app/presenter/user_presenter.rb
class UserPresenter < ModelPresenter
delegate :name, :email, to: :object
delegate :image_tag, to: :view_context
def gravatar
gravatar_id = Digest::MD5::hexdigest(email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
image_tag(gravatar_url, alt: name, class: "gravatar")
end
end
erb側でこう使う。
<% provide(:title, @user.name) %>
<% p = UserPresenter.new(@user, self) %>
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<h1>
<%= p.gravatar %>
<%= @user.name %>
</h1>
</section>
</aside>
</div>
書籍ではこの状態で使えたが、Rails7の場合は別途 auto_load の設定が必要な模様。
app/config/application.rb に以下を追記する。
config.autoload_paths += Dir.glob("#{config.root}/app/presenters")
Discussion