0

ユーザーがサインインできるようにする簡単なログインフォームを作成しようとしています。ユーザーのshowactionにリダイレクトしたいのですが、代わりに.../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 userましredirect_to users_path(user)たが、機能しません。

私のルートは次のようになります。

  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/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_touser_path(user)も試しましたが、同じ結果になりました。それを「正しい」方法で解決するためのヒントは素晴らしいでしょう!ユーザーがサインアップしたときにも同じ問題が発生し、/usersではなくにリダイレクトされました/

4

2 に答える 2

2

どのレーキルートがあなたに戻るかを確認してください。そこにユーザーページのルートがあります。あなたは次のようなものを使用する必要があります

redirect_to user_path(user)
于 2012-04-18T15:04:20.810 に答える
1

アクションがelse状態になり、その結果、探しているリダイレクトではなく、render:action=>"new"を実行しているようです。レンダリングアクションの場合、フォームは「... / sessions」と説明したようなものを表示します。これは、フォームがそのURLに対してPOSTを実行している可能性が高い(そして正しく)が、失敗してリダイレクトせずに再レンダリングしているためです。 。

言い換えれば、user.authenticate(...)が失敗しているか、何らかの理由でnilまたはfalseを返していると思います。

アップデート:

jquerymobileを使用しているため、リダイレクト先のページはAJAX化されています。ドキュメント(「リダイレクトとディレクトリへのリンク」セクションを参照)には、データの役割が次のようなdivでdata-url属性を使用できると記載されています。 URLを制御するページ。したがって、あなたの例では、app / pages/homeのコンテンツを'pageroled' divタグでラップし、必要に応じてdata-urlを設定します...例:

<div data-role="page" data-url="/home">
<% if signed_in? %>
  <%= render "signed_in"%>
<% else %>
  <%= render "home_page" %>
<% end %>
</div>
于 2012-04-18T16:07:58.533 に答える