2012-04-18 46 views
0

我試圖創建一個簡單的登錄表單,用戶應該能夠登錄。我希望它重定向到用戶顯示操作,但它會重定向到.../sessions ,我希望它重定向到.../users/1。我有Rails路由,創建新的會話時重定向到錯誤的網址

def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     sign_in user 
     redirect_to user 
    else 
     render 'new' 
    end 
    end 

我曾試圖改變redirect_to userredirect_to users_path(user)會話控制器,它看起來像這樣(我一直在下面的Rails教程的內容),但它不工作。

我的路線是這樣的:

root :to => 'pages#home' 

    resources :users 
    resources :sessions, only: [:new, :create, :destroy] 

    match '/signup', to: 'users#new' 
    match '/signin', to: 'sessions#new' 
    match '/signout', to: 'sessions#destroy', via: :delete 

和會話/ sessions.new.html.erb看起來是這樣的:

<%= form_tag sessions_path do %> 
    <%= text_field_tag :email, params[:email], :placeholder => "E-post" %> 
    <%= password_field_tag :password, nil, :placeholder => "Lösenord" %> 
    <%= submit_tag "Logga in" %> 
<% end %> 

我的Rails技能是有點生疏了,所以它可能是什麼基本。

更新

我設法通過建立在我的會話控制器中的索引操作其重定向到正確的路徑獲取調用時「解決」了。我不知道(或者認爲)這是實現它的最佳方式。原來的問題是,當用戶登錄時,出於某種原因,它被重定向到/sessions,而不是我想要的根路徑。當或更新瀏覽器時,應用程序崩潰(因爲我的會話控制器中沒有索引操作)。我不知道爲什麼它沒有重定向到正確的路徑,我也嘗試了redirect_to user_path(user),但結果相同。任何關於如何以「正確」方式解決問題的提示都會很棒!當用戶註冊時,我也遇到了同樣的問題,它重定向到/users而不是/

回答

1

東西這聽起來像你的行動是下降到別的條件,因此在做渲染:行動=>「新」,而不是你要找的重定向。在渲染動作的情況下,網址會顯示類似於你描述的「... /會話」,因爲表單可能(並正確)對該網址進行POST,但失敗並且不重定向而重新呈現。

換句話說,我認爲你的user.authenticate(...)可能會失敗,或者由於某種原因返回nil或false。

更新:

由於您使用jquerymobile,該頁面重定向到被AJAXed中的documentation(見重定向和鏈接到目錄的部分)說,你可以用一個數據 - div上具有data-role作爲頁面的url屬性來控制url。所以,你的榜樣,在包裝應用程序/頁/家的內容與任何你想要的數據,URL集...例如div標籤一個「樂雷頁」:

<div data-role="page" data-url="/home"> 
<% if signed_in? %> 
    <%= render "signed_in"%> 
<% else %> 
    <%= render "home_page" %> 
<% end %> 
</div> 
+0

謝謝,我不認爲是這樣。它在用戶登錄時重定向(警告消息正在顯示等),但路徑仍然是'/ sessions'。問題出在用戶更新他的借款人時,導致應用程序崩潰(因爲我在會話控制器中沒有索引操作)。我已經更新了我原來的問題。 – Anders 2012-04-21 13:38:49

+0

這真的很奇怪,因爲你所描述的一切正是如果你的行爲條件失敗會發生什麼。只是爲了咧嘴笑,當你將「redirect_to user」改爲「redirect_to root_url」時會發生什麼?當用戶登錄(創建會話)時是否正確重定向到root_url? – miked 2012-04-23 02:00:39

+0

是的,會話已成功創建並重定向到根目錄,但'/ sessions'仍在url中。我一直在關注Rails教程,它可能是導致錯誤url的其他方法嗎? – Anders 2012-04-23 05:37:39

2

檢查哪些耙路返回給你,你應該在那裏找到用戶頁面的路由。你應該使用像

redirect_to user_path(user) 
+0

謝謝,我想,但它不起作用。我已經更新了我原來的問題。 – Anders 2012-04-21 13:36:06

+0

我看到你更新了你的問題,並說你有嘗試重定向到users_path(用戶)..你有沒有嘗試redirect_to user_path(用戶)?(user_path,不是users_path) – gabitzish 2012-04-21 19:55:48

+0

我已經嘗試了user_path(user)和users_path(user),結果相同(如果我沒記錯的話),仍然會在url中顯示'/ sessions'。 – Anders 2012-04-21 20:19:31

相關問題