エラーが ViewComponent、Ruby on Rails 内に飲み込まれている

概要

良い一日をお過ごしください。それで、私にはこの奇妙な虫がいて、私のお尻を蹴っているのですが、神の愛のためにそれがどこにあるのかわかりません。

通常、ビュー内でレンダリングされる ViewComponent、つまり *.html.erb があります。例えば、

 <%= render Contact::Avatar.new(
      contact:,
      size: :xl,
    ) %>

すべて問題なく、コンポーネントは問題なく正常にレンダリングされます。問題は、コンポーネントにエラーがある場合に発生します。コンポーネントをレンダリング関数に渡すときにコンポーネント内で発生したエラーはすべて飲み込まれ、本来のエラーが発生する代わりに、エラーが飲み込まれて空の文字列が返されるため、問題が発生します。何が間違っているのかを知ることから。たとえば、コンポーネント ビューが contact/avatar_component.html.erb 内で未定義の変数を参照している場合、テストのために ArgumentError を発生させます。

<% raise ArgumentError %>

<% if u/contact.draft? %>
  <%= render AvatarComponent.new @contact, color: Color.indigo, **@options %>
<% else %>
  <% if @contact.name.strip.blank? || @contact.discarded? %>
    <%= render AvatarComponent.new @contact, **@options %>
  <% else %>
    <%= render AvatarComponent.new @contact, text: @contact.abbreviated_name, **@options %>
  <% end %>
<% end %>

そして、エラーはレンダリング関数によってキャプチャされます。

ただし、Ruby ファイルでエラーが発生した場合、つまり

class Contact::Avatar < ViewComponent::Base
  def initialize(contact:, **options)
    @contact = contact
    @options = options
    raise ArgumentError
  end
end

エラーがキャプチャされて表示される

解決策

再現できませんでした。

一部のライブラリは以下のものをオーバーライドする可能性があります。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://github.com/ViewComponent/view_component/issues/1981