在其他控制器的页面中嵌入设计新的会话表单

Embed Devise new session form in other controllers' pages

我的 Rails 5.2,Devise 4.7 应用程序具有用于新设计会话的标准单个 sign_in 页面。

我希望用户在登录前能够浏览几个不同的页面,并且每个页面上都有登录表单。

如何在其他控制器操作的视图中显示新会话的设计表单?有没有办法从我的其他控制器中 运行 来自 Devise::SessionsController#new 操作的代码?或者我是否需要为新会话保留一个登录页面,然后通过单独的 ajax 操作向该页面添加自定义内容?

我认为你有三种方法:

  1. 您可以使用相同的表单创建自定义弹出窗口,但将表单更改为远程,并相应地更改您的 form_for
  2. 您可以将ajax 处理添加到Devise::SessionsController#new 操作(添加respond_to 并创建js 模板来呈现它),然后在需要的页面上调用此操作。
  3. 移动到React/Angular/Vue

我在 app/views/devise/sessions/new.html.erb 中放置了一个空的 <div id="preview_here"</div>,它是从 ajax 调用中填充的(对于具有 skip_before_action :authenticate_user! 的非 Devise 控制器)