2012-01-26 61 views
3

我正在嘗試設置註冊和登錄頁面在相同的視圖和根網址。Rails 3 - 設計註冊和同時登錄查看(多重定向)

我通過更改用戶/會話/新視圖(設計生成的視圖)來放置2種表單(註冊和登錄)。

到目前爲止好,但我有2個問題:

首先,當我嘗試註冊並具有無效數據,它重定向我mywebapp /用戶,同時它應該重定向到同一頁面mywebapp/(root_path)。第二,如果我嘗試登錄,它會成功地做到這一點,並重定向到正確的URL(root_path也),但它一直試圖重定向到它,我得到的錯誤「太多的重定向到http://localhost ...「。

我的routes.rb:

devise_for :users do 
    root :to => "devise/sessions#new" 
end 

我的用戶/會話/ new.rb:

<% if user_signed_in? %> 
    <%= render 'users/sessions/home' %> 
<% else %> 
    <%= render 'users/sessions/login' %> 
<% end %> 

我_login.rb部分:

<h1>Index</h1> 
<hr/> 

<h2>Log in</h2> 
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <table> 
    <tr> 
     <td><%= f.label :email %></td> 
     <td><%= f.email_field :email %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :password %></td> 
     <td><%= f.password_field :password %></td> 
    </tr> 
    </table> 

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

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

<% if devise_mapping.recoverable? %> 
    <%= link_to "Forgot your password?", new_password_path(resource_name) %><br/> 
<% end %> 

<hr/> 

<h2>Sign up</h2> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <table> 
    <tr> 
     <td><%= f.label :first_name %></td> 
     <td><%= f.text_field :first_name %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :last_name %></td> 
     <td><%= f.text_field :last_name %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :email %></td> 
     <td><%= f.email_field :email %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :password %></td> 
     <td><%= f.password_field :password %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :password_confirmation %></td> 
     <td><%= f.password_field :password_confirmation %></td> 
    </tr> 
    </table> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 

我_home部分就是現在是空的觀點。

在此先感謝。

回答

1

第一個問題:請使用rails generate devise:views命令,這將創造設計的觀點爲你的意見/設計文件夾(configuring views)。您可以在視圖渲染放部分:

views/devise/registrations/new.html.erb(註冊)

views/devise/sessions/new.html.erb(登錄)。

第二個問題:您將root_path設置爲設計/ sessions#new,如果您登錄了正確的設計,則嘗試一次又一次重定向到root_path。您需要設置一些其他root_path,如果你想拒絕訪問爲未通過身份驗證的用戶,你可以添加過濾器控制器(Devise documentation),並制定重定向這些用戶對您進行身份驗證頁面:

before_action :authenticate_user!(導軌3)或before_filter :authenticate_user!(Rails 3)

+0

你能否詳細說明如何調用'渲染部分'設計視圖不是部分。你是否建議將它們製作成偏片並將它們放在一個視圖中? –

+0

如果您想要在一個頁面上登錄/註銷表單,您可以修改../registrations/new.html.erb和../sessions/new.html.erb頁面,將渲染部分與這兩種表單放在一起。這兩個new.html.erb應該有相同的形式(我的命題是使用部分視圖)。 –

+0

@MichałZalewski您是否找到解決問題的方法?如果您願意,請分享。 –