注册/登录路由错误

时间:2012-03-08 12:07:07

标签: ruby-on-rails ruby-on-rails-3.1 routing

对不起新手的问题,但我正试图掌握RoR。我有一个非常基本的注册和登录过程,但是在使路由正确方面遇到了一些困难。当我按下我的注销按钮时,我也不确定我是否实际上已成功注销,因为它不会显示登录按钮。

我在Rails 3.1上的设置如下:

会话控制器

  

class SessionsController< ApplicationController的       def new       端

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的        def new           @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"
     

很抱歉在这篇文章中大量使用了代码,但我认为最好全面了解所有内容,以便人们可以看到我出错的地方。

你能提供的任何帮助都会非常感激,因为我自己似乎没有得到它

谢谢, 汤姆

1 个答案:

答案 0 :(得分:1)

您的代码看起来不错,但您的路线看起来有点奇怪。

我会尝试这样的事情:

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

然后我认为你现在得到的一切都应该有用。