Как отображать ошибки формы входа в систему Devise при использовании Hotwire Rails

Я следил за этим видео GoRails, чтобы заставить 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)

Как Крис говорит в видео , которое я отредактировал мое Завещание инициализатором , чтобы выглядеть это .

В моем package.json есть @hotwired/turbo-rails": "^7.0.0-beta.5, но в исходном коде Криса для эпизода beta.3 так что, похоже, проблема не в этом.

Что мне здесь не хватает?

3 ответа

Решение

Я получил эту работу, объединив все мои ошибки / уведомления о вспышках в одну часть, вместо того, чтобы иметь частичную часть уведомления о вспышке и отдельный блок для ошибок формы:

Я положил это в свой 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выглядит так:<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

У меня была та же проблема, и оказалось, что нет триггера для навигации. Добавление:turbo_stream к этой строке в инициализаторах / devise.rb решило это для меня:

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

Мое решение заключается в том, что вы не используете app/javascript/packs/your_application.jsв макете страницы sign_in.

Вместо этого вы можете написать новый js, например app/javascript/packs/blank.js, в этом , не добавляйте import "@hotwired/turbo-rails".

И используйте blank.jsв новом файле макета app/views/layouts/blank.html.erbдля разработки sign_inстраница, например:

      <head>
    <%= javascript_pack_tag 'blank' %>
    <%= stylesheet_pack_tag 'blank' %>
</head>
Другие вопросы по тегам