Ruby on Rails / gem 设计 / 模态登录页面

Ant*_*ine 2 ruby-on-rails devise

我想让登录页面处于模态(而不是打开单独的页面)。我正在使用 gem 设计创建帐户。在 views/layouts/application.html.erb 中,我创建了调用模态的代码:

<div id="openModal" class="modalDialog">
  <div>
  <a href="#close" title="Close" class="close">X</a>
    <%=render 'devise/sessions/newsession'%>
 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后在 views/devise/sessions/_newsession.html.erb

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </div>

  <div class="actions">
    <%= f.submit "Log in" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

<#:0x007fafd8bc60f8> 的未定义局部变量或方法“资源”

页面 application.html.erb 中似乎无法识别设计。

你能理解错误来自哪里吗?

Seb*_*lma 7

当您呈现使用 aresourceresource_name变量的登录表单时,这些变量不是从设计控制器“外部”初始化的,您可以做的是将它们添加到您的 ApplicationHelper 文件中,以便能够从您当前的控制器或任何其他。

尝试编辑您的帮助文件,添加resource,resource_namedevise_mapping

module ApplicationHelper
  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
   @devise_mapping ||= Devise.mappings[:user]
  end
end
Run Code Online (Sandbox Code Playgroud)

我想补充的是,如果你想呈现会话#新的视图文件,你可以简单地渲染这个文件render file: 'devise/sessions/new',如果你运行的devise:views命令,这将有助于你保持的一种形式,而不是创建当然一个新的,是只是一个建议。