如何使用Devise

时间:2016-08-09 22:15:35

标签: ruby-on-rails devise

我刚刚在我的rails应用程序上安装了Devise。我遵循了Devise' github的指示。我跟着它去了我必须运行$ rails generate devise:views的地方,它创建了几个Devise视图(会话,注册和& c)。

我的计划是使用修改后的Devise内置视图页面(Devise已经完成了创建后端机制的艰苦工作,我想保留它)。登录/登录页面将需要电子邮件和密码。它会记住我和提交按钮,就像Devise'默认登录页面。更重要的是,它将位于我的welcome/index页面(主/根页面)

我对form_for相当新,所以我无法理解要替换的代码。我在api.rubyonrails上的form_for上做了一些阅读。

以下是Devise'内置登录视图

app/views/devise/sessions/new.html.erb

<h2>Log in</h2>

<%= 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>

  <% if devise_mapping.rememberable? -%>
    <div class="field">
      <%= f.check_box :remember_me %>
      <%= f.label :remember_me %>
    </div>
  <% end -%>

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

<%= render "devise/shared/links" %>

我的理论是,上面的代码应该可以在任何地方使用,只要我将form_for指向正确的类(User)和正确的路径。

我将上面的代码复制到welcome / index页面并更改了resource

<%= form_for :user, url: session_path(:user) do |f| %>给了我undefined local variable or method devise_mapping for #<#<Class:0x007fd4f2e9eb38>:0x007fd4f29ea858>错误。

好的,我删除了remember me按钮,但现在显示undefined local variable or method resource_name for #<#<Class:0x007fd4f2e9eb38>:0x007fd4f3813358>错误。

是否可以重复使用Devise&#39;我的欢迎/索引页面上的登录页面?如果没有,我如何在欢迎/索引上为用户的电子邮件和密码创建form_for?

1 个答案:

答案 0 :(得分:0)

您可以在欢迎/索引页面上重复使用Devise'登录页面,但为了能够执行此操作,您必须初始化git instaweb它会给您错误,如上所述。

@resource, @devise_mapping ect.

application_helper.rb

这样您就可以将设计 def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end 等放置在视图中的任何位置。