-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Troubleshooting Rails 7 and Turbo Drive
Yaroslav Shmarov edited this page Apr 5, 2022
·
6 revisions
Since Turbolinks
is replaced with Turbo Drive
(That is part of Hotwire), we need to ensure full-page redirects when submitting devise forms. To do so, add data: { turbo: false }
on all devise forms, after you run rails generate devise:views
.
Example:
app/views/devise/confirmations/new.html.erb
-<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
+<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post, data: { turbo: false } }) do |f| %>
app/views/devise/registrations/new.html.erb
--<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
++<%= form_for(resource, as: resource_name, url: registration_path(resource_name), data: { turbo: false }) do |f| %>
Do this with all the forms under app/views/devise
.
The Log out
link. Since Rails 7 does not use rails-ujs
, you can not use method
on link_to
. So something like this will not work:
<%= link_to "Log out", destroy_user_session_path, method: :delete %>
Instead, here are 3 ways a Log out
link will work:
<%= link_to "Log out", destroy_user_session_path, data: { turbo_method: :delete } %>
<%= link_to "Log out", destroy_user_session_path, 'data-turbo-method': :delete %>
<%= button_to "Log out", destroy_user_session_path, method: :delete, data: { turbo: false } %>
Here's a minimal set up for devise links that you might want to add to your app:
<% if current_user %>
<%= link_to current_user.email, edit_user_registration_path %>
<%= link_to "Log out", destroy_user_session_path, data: { turbo_method: :delete } %>
<% else %>
<%= link_to_unless_current "Log in", new_user_session_path %>
<%= link_to_unless_current "Register", new_user_registration_path %>
<% end %>