ruby-on-rails - Ruby on Rails/gem 设计/模式中的登录页面

标签 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>

然后在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" %>

我收到以下错误消息:

undefined local variable or method `resource' for <#:0x007fafd8bc60f8>

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

您知道错误从何而来吗?

最佳答案

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

尝试编辑辅助文件,添加 resourceresource_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

补充一点,如果您想渲染session#new View 文件,您可以简单地将此文件渲染为渲染文件:'devise/sessions/new',如果您运行了devise:views 命令,这将帮助您只维护一种表单而不是创建一个新表单,当然,这只是一个建议。

关于ruby-on-rails - Ruby on Rails/gem 设计/模式中的登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388195/

相关文章:

ruby-on-rails - 如何使用可选的 omniauth token 作为身份验证 token 来设计 http 身份验证

ruby-on-rails - 设计如何向创建用户表单添加附加字段?

ruby-on-rails - 在 ruby​​ 中转义双引号

ruby-on-rails - 发送电子邮件时 Heroku 超时

ruby-on-rails - 事件管理员多选过滤器

ruby-on-rails - Ruby on Rails : Saving user id manually? 或者有更好的方法吗?

ruby-on-rails - 测试 flash 消息的内容 : `The assertion was not run because of an invalid css selector`

ruby-on-rails - 在生产应用程序中从头开始进行身份验证?

ruby-on-rails - 在任何页面上设计注册表格

ruby-on-rails - 设计:不需要电子邮件