希望你今天过得愉快.所以,我有一个奇怪的虫子,一直踢我的屁股,我不知道它在哪里的位置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

错误被捕获并呈现

enter image description here

推荐答案

无法复制.

  1. 判断您是否在一个空白的ROR项目上遇到了相同的问题,并使用ViewComponent.
  2. 判定有罪.

有些libs可能会覆盖一些东西:

https://github.com/ViewComponent/view_component/issues/1981

Ruby-on-rails相关问答推荐

方法和括号之间没有空格时出错

RubyOnRail在测试环境中启动失败

如何在Rails中创建没有字符串的查询

我的 Ruby on Rails Web API 的 Docker 映像未在服务器上构建,因为它未与 ruby​​gems.org 连接

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

如何在 Arel 中重用单个绑定变量?

无效的单表继承类型:Rails

Rails 连接并包含连接表中的列

Rails 自动加载完全大写的名称,如 API

Rails - 设计 - 登录时出现错误消息?

在 Windows 上使用 Ruby 进行开发

使用 Ruby on Rails 从原始 IP 地址获取用户国家名称

rails 模型 has_many 本身

如何在 Rails 上生成 AuthenticityToken

如何在 Rails 迁移中添加判断约束?

连接表的最佳 SQL 索引

rails 单数资源还是复数?

如何打印出范围之间的随机数?

从任何编码强制字符串为 UTF-8

在 Rails 协会中未找到名为的协会可能拼写错误的问题