4

我想在我的网站标题中放置一个登录表单。我使用 Rails 3.2.8 和最新的设计。在app/views/devise/sessions/new.html.erb文件中创建了一个登录表单:

  <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => 'main'}) do |f| %>
    <div><%= f.label :login %> <%= f.text_field :login, :placeholder => 'Enter username' %></div>
    <div><%= f.label :password %> <%= f.password_field :password, :placeholder => 'Enter password' %></div>
    <% if devise_mapping.rememberable? -%>
      <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
    <% end -%>
    <%= f.submit "Go" %>
  <% end %>

如果我尝试复制该代码并将其放入我application.html.erb的 .

undefined local variable or method `resource' for #<#<Class:0x3cb62c8>:0x3c73b00>

那么我可以只使用普通的导轨形式/users/sign_in作为动作吗?登录后如何告诉设计重定向到哪里?

4

2 回答 2

10

We have a wiki page for that on the Devise wiki:

https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

Enjoy!

于 2012-10-26T10:00:09.517 回答
1

您必须@user = User.new在所有将显示带有登录表单的标题的控制器操作中包括在内。

例如,假设您有一个带有 Home 操作的 Pages 控制器。并且您想在应用程序布局的导航中显示登录表单。

class PagesController < ApplicationController
  def home
    @user = User.new
  end
end

在 application.html.haml 上,你会有类似的东西

- if user_signed_in?
  = link_to "sign out", destroy_user_session_path, method: :delete
- else
  = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => {:class => 'main'}) do |f| 
  ...
于 2012-10-26T01:09:31.063 回答