2012-04-18 10 views
0

ユーザーがサインインできるようにする単純なログインフォームを作成しようとしています。ユーザーの表示アクションにリダイレクトしたい代わりに、.../sessions私はそれを `.../users/1 'にリダイレクトしたいと思っています。私はredirect_to users_path(user)redirect_to userを変更しようとしました新しいセッションを作成するときにRailsルーティングが間違ったURLにリダイレクトされる

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 

次のようになりますセッションコントローラ(私は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 %> 

マイレールのスキルが少し錆びているので、それはおそらく何か基本的。

更新

私が呼ばなっ正しいパスにリダイレクト私のセッションコントローラのインデックスアクションを作成することによって、それを「解決」するために管理。私はこれが最も最適な方法だとは知らない(または考えている)。元の問題は、ユーザーがサインインしたときに何らかの理由でそれが/sessionsにリダイレクトされていて、自分が望むルートパスではないということでした。ユーザーがブラウザを更新したとき、またはアプリケーションがクラッシュする(セッションコントローラにインデックスアクションがないため)。私はなぜそれが正しいパスにリダイレクトされているのかわからない、私はまたredirect_to user_path(ユーザー)を試みたが、同じ結果です。どのように "正しい"方法でそれを解決するためのヒントは、素晴らしいだろう!ユーザーがサインアップしたときにも同じ問題が発生しましたが、/の代わりに/usersにリダイレクトされました。

答えて

1

ようなものを使用する必要があります。レンダリングアクションの場合、フォームにはそのURLへのPOSTを実行している可能性がありますが、失敗してリダイレクトせずに再レンダリングしているので、 ".../sessions" 。

つまり、あなたのuser.authenticate(...)はおそらく失敗しているか、何らかの理由でnilまたはfalseを返していると思います。

UPDATE:あなたはjquerymobileを使用しているので

、あなたはリダイレクト先のページはにAJAXedされているdocumentation(リダイレクトとディレクトリのセクションへのリンクを参照してください)あなたはデータ - を使用できることを述べています。 URLを制御するページとしてdata-roleを持つdivのurl属性。したがって、あなたの例では、あなたの望むものに合わせてdata-urlを設定した 'page roled' divタグのapp/pages/homeにコンテンツをラップします。例えば:

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

ありがとう、私はそれが事実だとは思わない。ユーザーがサインインすると(警告メッセージが表示されているなど)、リダイレクトされますが、パスは '/ sessions'です。問題はユーザーが自分の借り手を更新したためで、アプリケーションがクラッシュする原因になった(セッションコントローラにインデックスアクションがないため)。私は元の質問を更新しました。 – Anders

+0

これは本当に奇妙です。記述していることは、アクションの条件が失敗した場合に起こることとまったく同じですからです。 grinsの場合、 "redirect_to user"を "redirect_to root_url"に変更するとどうなりますか?ユーザーがサインイン(セッションを作成)すると、root_urlに正しくリダイレ​​クトされますか? – miked

+0

はい、セッションは正常に作成され、ルートにリダイレクトされますが、 '/ sessions'はまだURLにあります。私はRailsチュートリアルブックに従っています。間違ったURLを引き起こしている他の方法かもしれませんか? – Anders

2

あなたにどのようなルートが返ってくるかチェックして、そこにユーザーページのルートを見つけてください。 =>「新しい」アクションではなく、あなたが探しているのリダイレクト:あなたは、あなたの行動が他の条件に落下し、その結果、レンダリングを行っているようですね

redirect_to user_path(user) 
+0

ありがとう、私はそれを試しましたしかしそれはうまくいかなかった。私は元の質問を更新しました。 – Anders

+0

私はあなたの質問を更新し、そこにあなたがuser_path(ユーザー)にリダイレクトしようとしたのを見ました。あなたはredirect_to user_path(user)を試しましたか?(user_path、not users_path) – gabitzish

+0

user_path(user)とusers_path(user)の両方を試してみましたが、同じ結果(正しく覚えていれば)は '/ sessions'をURLに表示しています。 – Anders

関連する問題