2016-08-09 39 views
0

我剛剛在我的Rails應用程序上安裝了Devise。我按照Devise' github的說明操作。我跟着它到我必須運行$ rails generate devise:views,它創建了幾個Devise視圖(會話,註冊,& c)。如何使用Devise使用自定義登錄頁面表格

我的計劃是使用修改後的Devise的內置視圖頁面(Devise已經做了創建後端機制的辛勤工作,我想保留這一點)。登錄/登錄頁面將需要電子郵件和密碼。它也會記住我和一個提交按鈕,就像Devise的默認登錄頁面一樣。更重要的是,它會在我的welcome/index頁面(主/根頁面)

我對form_for相當陌生,所以我無法理解要替換的代碼。我在api.rubyonrails上的form_for上做了一些閱讀。

下面是設計的內置登錄意見

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向右類(用戶),並在正確的道路。

我將上面的代碼複製到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的登錄頁面?如果沒有,我如何在welcome/index上創建一個form_for用戶的電子郵件和密碼?

回答

0

您可以在您的歡迎頁/索引頁上重複使用Devise的登錄頁面,但要做到這一點,您必須初始化@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 

這將使你放置色器件registration等。在您的視圖的任何地方。

相關問題