希望你今天过得愉快.所以,我有一个奇怪的虫子,一直踢我的屁股,我不知道它在哪里的位置god 的爱.
我有一个ViewComponent,通常在视图中呈现,即*.html.erb
.例如,
<%= render Contact::Avatar.new(
contact:,
size: :xl,
) %>
一切都很好,组件成功渲染,没有问题.问题出现在组件有错误时,当组件传递给render
函数时,组件内引发的任何错误都会被吞噬,而不是像它应该引发的那样,错误被吞噬并返回一个空字符串,这阻止了我知道什么是错误的.例如,如果组件视图引用了一个未定义的变量,在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 %>
错误由render
函数捕获.
但是,如果在Ruby文件中引发了错误,即
class Contact::Avatar < ViewComponent::Base
def initialize(contact:, **options)
@contact = contact
@options = options
raise ArgumentError
end
end
错误被捕获并呈现