3

我在使用 Turbo Frames 设置设计注册表单时遇到问题。我希望将 Devise 注册表单设置为“逐步参与”表单,只需要电子邮件即可从主页注册新用户。

到目前为止,我是这样设置的:

  • 首先,我使用这个解决方法来让默认的 Devise 视图与 Hotwire 一起使用。
  • 然后,我使用这种方法让设计注册表单在我的主页上工作
  • 最后,我使用这种方法通过 Devise 设置了仅限电子邮件的注册。

这一切都按预期工作,但是当用户完成注册时,它会重定向并显示一个 Flash 页面。相反,我想使用 Turbo Frames 将表单替换为“感谢您注册”之类的消息,而无需重新加载任何页面或进行重定向。

此外,如果表单中有任何错误(例如电子邮件为空白),它会重定向到默认的设计注册视图并在那里显示错误。我希望这发生在主页框架内,以便在显示错误时不会重新加载页面。

那么,我将如何使用 Devise 和 Turbo Frames 做到这一点?

这是主页上的表单:

<%= form_for resource, :as => resource_name, :url => registration_path(resource_name), html: { class: "sm:flex" } do |form| %>
  <%= form.label :email, class: "sr-only" %>
  <%= form.email_field :email %>
  <div class="mt-3 rounded-md shadow sm:mt-0 sm:ml-3 sm:flex-shrink-0">
    <%= form.submit "Subscribe" %>
  </div>
<% end %>

而且,为了让它工作,我创建了一个confirmations_controller.rb覆盖默认值的方法,Devise::ConfirmationsController如下所示:

class ConfirmationsController < Devise::ConfirmationsController
  private
  def after_confirmation_path_for(resource_name, resource)
    sign_in(resource) # In case you want to sign in the user
    root_path
  end
end

我是否需要创建一个 UsersController 来覆盖 Devise 的某些部分以使用涡轮帧?我该怎么做?

4

0 回答 0