Ошибка (учебник по RoR) - раскрывающийся список не срабатывает с загрузкой - неверный путь уничтожения сеанса?

Ошибка в руководстве по Rails (Hartl) v3.2

Я на 8 главе, и все тесты проходят правильно до упражнений. За исключением двух проблем (я думаю, что они связаны).

Выпадающее меню не запускается при начальной загрузке, так как путь уничтожения сеанса кажется неверным. Я также пытаюсь использовать тег form_tag вместо тега form_for и продолжаю получать следующую ошибку:

undefined method `[]' for nil:NilClass

Вот файл new_html.erb в app/views/sessions:

<% provide(:title, "Sign in") %>
<h1>Sign in</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_tag sessions_path do %>

      <%= label_tag :email %>
      <%= text_field_tag :email %>

      <%= label_tag :password %>
      <%= password_field_tag :password %>

      <%= submit_tag "Sign in", :class => "btn btn-large btn-primary" %>
    <% end %>

    <p>New user? <%= link_to "Sign up now!", signup_path %></p>
  </div>
</div>

Вот файл session_controller.rb:

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_to user
    else
      flash.now[:error] = 'Invalid email/password combination' # Not quite right!
      render 'new'
    end
  end

  def destroy
    sign_out
    redirect_to root_path
  end
end

Наконец, вот вывод рейк-маршрутов:

      users GET    /users(.:format)          users#index
            POST   /users(.:format)          users#create
   new_user GET    /users/new(.:format)      users#new
  edit_user GET    /users/:id/edit(.:format) users#edit
       user GET    /users/:id(.:format)      users#show
            PUT    /users/:id(.:format)      users#update
            DELETE /users/:id(.:format)      users#destroy
   sessions POST   /sessions(.:format)       sessions#create
new_session GET    /sessions/new(.:format)   sessions#new
    session DELETE /sessions/:id(.:format)   sessions#destroy
     signup        /signup(.:format)         users#new
     signin        /signin(.:format)         sessions#new
    signout DELETE /signout(.:format)        sessions#destroy
       help        /help(.:format)           static_pages#help
      about        /about(.:format)          static_pages#about
    contact        /contact(.:format)        static_pages#contact
       root        /                         static_pages#home

Любая помощь будет здорово.

Редактировать:

У cbright было это. Мне пришлось изменить файл session_controller. Следующие две строки работают по назначению.

user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])

person d_ethier    schedule 19.03.2012    source источник


Ответы (1)


Символ сеанса, используемый с form_for, больше не используется, поэтому замените params[:session][:email] и params[:session][:password] на params[:email] params[:password].

person cbright    schedule 21.03.2012
comment
Это помогло, спасибо! Обновлен исходный вопрос с правильным кодом. - person d_ethier; 21.03.2012