4

Web サイトのヘッダーにログイン フォームを配置したいと考えています。Rails 3.2.8 と最新の Devise を使用しています。この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 %>

そのコードをコピーして my に入れようとすると、application.html.erb上記のリソース変数に関するエラーが発生します。

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

/users/sign_inでは、アクションとして通常の Rails フォームを使用することはできますか? ログイン後のリダイレクト先をdeviseに伝えるにはどうすればよいですか?

4

2 に答える 2

10

そのための wiki ページが Devise wiki にあります。

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

楽しみ!

于 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 に答える