问题描述
我有 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
看起来像这样: