2012-03-08 10 views
1

初心者の質問に申し訳ありませんが、私はRoRと握ってみようとしています。私は非常に基本的なサインアップとログイン処理を行っていますが、正しいルーティングを得るにはいくつかの問題があります。ログアウトボタンを押したときに実際にログアウトされているかどうかも分かりません。なぜなら、ログアウトボタンを表示していないからです。登録/ログインルーティングのエラー

のRails 3.1に次のように私のセットアップは次のとおりです。

セッションコントローラ

クラスSessionsController < ApplicationControllerに デフ新しい エンド

def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_url, :notice => "Logged in!" 
    else 
     flash.now.alert = "Invalid email or password!" 
     render "signup" 
    end 
end 

def destroy 
    session[:user_id] = nil 
    redirect_to root_url, :notice => "Logged Out!" 

エンド エンド

ユーザーコントローラ

クラスUserControllerで< ApplicationControllerに デフ新しい @user = User.new エンド

def create 
    @user = User.new (params[:user]) 
    if @user.save 
    redirect_to root_url, :notice => "Signed Up!" 
    else 
    render "user/new" 
    end 
end 
end 

ユーザーモデル

class User < ActiveRecord::Base 
has_secure_password 
validates_confirmation_of :password 
validates_presence_of :password, :on => :create 
validates_presence_of :email 
validates_uniqueness_of :email, :on => :create 

end 

セッション/ new.html.erb

<h1>Log In</h1> 

<%= form_tag login_path do %> 
<div class="field"> 
    <%= label_tag :email %> 
    <%= text_field_tag :email, params[:email] %> 
</div> 

<div class ="field"> 
    <%= label_tag :password %> 
    <%= password_field_tag :password %> 
</div> 

<div class="actions"><%= submit_tag "Log in" %></div> 
<%end%> 

ユーザー/ new.html.erb

<% if session[:user_id] %> 
    <!-- user is logged in --> 
    <%= link_to logout_path %> 
    <% else %> 
    <!-- user is not logged in --> 
    <%= link_to login_path %> 
<% end %> 

<h1>Sign Up</h1> 

<%= form_for @user do |f| %> <% if @user.errors.any? %> <div class="error_messages"> <h2>Form is invalid</h2> <ul> <% for message in @user.errors.full_messages %> <li><%= message %></li> <% end %> </ul> </div> <% end %>

<div class = "field"> 
    <%= f.label :email %> 
    <%= f.text_field :email %> 
</div> 

<div class = "field"> 
    <%= f.label :password %> 
    <%= f.password_field :password %> 
</div> 

<div class = "field"> 
    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation %> 
</div> 

<div class="actions"><%= f.submit %></div> 
<% end %> 

最後に私のルートは、ファイル

MadeByV2::Application.routes.draw do 

controller :user do 
get "signup" => "user#new" 
end 

resources :users 

controller :sessions do 
    get "login" => "sessions#new" 
    post "login" => "sessions#create" 
    delete "logout" => "sessions#destroy" 
end 
root :to => "user#new" 

エンド

この記事のコードの大規模な使用のために申し訳ありませんが、私は人々が見ることができるので、それはすべてのも丸みを帯びたビューを提供するために最善の姿どこ間違っている。

あなたは、私はそれを取得していないようですので、実際にははるかに高く評価されるだろう自分自身を提供することができますすべてのヘルプ

おかげで、 トム

+0

あなたのlink_toが間違っているように見えます... <%= link_to logout_path%>を<%= link_to "ログアウト"、logout_path、:method =>:delete%> 'に変更して、 。 –

+0

こんにちはMatenia、助けてくれてありがとう、私はこれを私のコードに追加しました。 :) –

答えて

1

あなたのコードは正常に見えるが、あなたのルートは少し奇妙に見えます。

私はこのような何か試してみた:その後、私はあなたが現在持っているすべてのものが動作するはずだと思う

resources :users 
resources :sessions 
match 'login' => 'sessions#new', :as => :login 
match 'logout' => 'sessions#destroy', :as => :logout 

を。

+0

こんにちはジョン、助けてくれてありがとう、私はこれを私のルートファイルに組み込みました。そして、すべてが今、完璧に動作しているようです! –