oknm.jp

RailsのView Componentについて確認した


Rails 6.1でView Componentが導入されるというのをずいぶん前にみて、Rails 6.1がリリースされて最終的にどうなったのか把握してなかったので確認した。

結論からいうと、Rails 6.1からrenderrender_inメソッドを持つオブジェクトを渡せるようになった、だけだった:

class ViewComponent
  def render_in(view_context)
    'hello'
  end
end
<%= render ViewComponent.new %>

CHANGELOG:

https://github.com/rails/rails/blob/6-1-stable/actionview/CHANGELOG.md

RenderingHelper supports rendering objects that respond_to? :render_in.

Rails Guideの記載:

https://guides.rubyonrails.org/layouts_and_rendering.html#rendering-objects

あと、Rails的には別にView Componentという呼称は使ってないみたい。
View Component的なことをやりやすいようにRails側にフックポイントを用意した、と理解した。

導入の元ネタになったgithub/view_componentrender_inメソッドを実装してる:

https://github.com/github/view_component/blob/main/lib/view_component/base.rb#L58

個人的に、いままではビュー用のロジックを書く場所として、ビューヘルパかactive_decoratorを導入してデコレータを作るの2択だったけど、局所的で独立性が高いロジックは座りが悪い感じがあった。render_inメソッドを定義したクラスを作るパターンでどうなるか、試してみたい。