Ошибка регистрации / входа в систему - PullRequest
1 голос
/ 08 марта 2012

Извините за вопрос новичка, но я пытаюсь разобраться с RoR. У меня есть очень простой процесс регистрации и входа в систему, но у меня возникли некоторые трудности с правильной маршрутизацией. Я также не уверен, действительно ли я успешно вышел из системы, когда нажимаю кнопку выхода из системы, потому что она не отображает кнопку входа в систему, как следует.

Мои настройки в Rails 3.1 следующие:

Контроллер сеансов

класс SessionsController

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

  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 Ответ

1 голос
/ 08 марта 2012

Ваш код выглядит нормально, но ваши маршруты выглядят немного странно.

Я бы попробовал что-то вроде этого:

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

Тогда я думаю, что все, что у тебя есть, должно работать.

...