使用 Hotwire Rails 时如何显示设计登录表单错误

问题描述

我有 followed this GoRails video 可以让 Devise 与 hotwire-rails 合作。我不知道为什么我的登录错误消息的工作方式与视频中的不同。错误消息在注册表单上效果很好,但在登录表单上我收到此错误

Processing by Devise::SessionsController#create as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]","user"=>{"email"=>"elvis@example.com","password"=>"[FILTERED]","remember_me"=>"0"},"commit"=>"Log in"}
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms | Allocations: 406)

正如 Chris 在视频中所建议的,我已经将我的设计初始化器编辑为看起来像 this

我的 package.json 有 @hotwired/turbo-rails": "^7.0.0-beta.5,但在 Chris 的剧集源代码中它是 beta.3,所以这似乎不是问题。

在这里遗漏了什么?

解决方法

我遇到了同样的问题,结果没有触发导航。将 :turbo_stream 附加到 initializers/devise.rb 中的这一行为我解决了这个问题:

Devise.setup do |config|
  [...]
  config.navigational_formats = ['*/*',:html,:turbo_stream]
  [...]
end
,

我通过将所有 Flash 错误/通知统一为一个部分而不是将 Flash 通知部分和一个单独的表单错误块合并来实现此目的:

我把它放在我的 layouts/application.rb 中:

<%= render "shared/notices" %>

那部分看起来像这样:

<% flash.each do |msg_type,message| %>
  <div class="alert">
    <div class="container">
      <button class="close" data-dismiss="alert"><span>×</span></button>
      <%= message %>
    </div>
  </div>
<% end %>

然后,我在 form_for 中的 views/devise/sessions/new.html.erb 看起来像这样:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...