2016-02-10 6 views
0

Отредактировано: Ошибка с ошибкой теперь, код остался прежним.Rails Tutorial (M. Hartl) Глава 8 Ошибка: неопределенная локальная переменная

В главе 8.3 учебника по рубине Hartl. Получение этой ошибки при проверке рейка для действительного теста входа в систему.

test_login_with_valid_information_followed_by_logout#UsersLoginTest (1454541872.34s) 
NameError:   NameError: undefined local variable or method `redirect_to_root_url' for #<SessionsController:0x007fce97a93068> 
      app/controllers/sessions_controller.rb:18:in `destroy' 
      test/integration/users_login_test.rb:39:in `block in <class:UsersLoginTest>' 
     app/controllers/sessions_controller.rb:18:in `destroy' 
     test/integration/users_login_test.rb:39:in `block in <class:UsersLoginTest>' 

Точка сообщения об ошибке в строке 39 в моем входе испытании и линиях 18 в моем контроллере Sessions как ошибки, так как вы можете увидеть здесь:

test/integration/users_login_test.rb:39:in `block in <class:UsersLoginTest>' 

app/controllers/sessions_controller.rb:18:in `destroy' 

users_login_test.rb:

линия 39 будет 'удалить logout_path'

require 'test_helper' 

class UsersLoginTest < ActionDispatch::IntegrationTest 
    def setup 
     @user = users(:michael) 
    end 

    test "login with invalid information" do 
     get login_path 
     assert_template 'sessions/new' 
     post login_path, session: { email: "", password: "" } 
     assert_template 'sessions/new' 
     assert_not flash.empty? 
     get root_path 
     assert flash.empty? 
    end 

    test "login with valid information" do 
     get login_path 
     post login_path, session: { email: @user.email, password: 'password' } 
     assert_redirected_to @user 
     follow_redirect! 
     assert_template 'users/show' 
     assert_select "a[href=?]", login_path, count: 0 
     assert_select "a[href=?]", logout_path 
     assert_select "a[href=?]", user_path(@user) 
    end 

    test "login with valid information followed by logout" do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_not is_logged_in? 
    assert_redirected_to root_url 
    follow_redirect! 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
    end 
end 

Пытался изо всех сил исправить соответствующий код. Я думаю, что метод уничтожения определен правильно и в нужном месте. Вот мой помощник и контроллер.

sessions_controller.rb:

линия 18 будет 'redirect_to_root_url'

class SessionsController < ApplicationController 


def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     redirect_to user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
    render 'new' 
    end 
    end 

    def destroy 
    log_out 
    redirect_to_root_url 
    end 
end 

sessions_helper.rb:

module SessionsHelper 

    #Logs in the given user. 
    def log_in(user) 
     session[:user_id] = user.id 
    end 

    #Returns the current logged in user, if any 
    def current_user 
     @current_user ||= User.find_by(id: session[:user_id]) 
    end 

    #Returns true if the user is logged in, false otherwise 
    def logged_in? 
     !current_user.nil? 
    end 

    #Logs out current user 
    def log_out 
     session.delete(:user_id) 
     @current_user = nil 
    end 
end 
+0

Какой раздел и подраздел этой главы вы в? –

+0

Раздел 8.3 Выход из системы, листинг 8.28 находится прямо там, где я застрял –

+0

Отредактировано, ошибка отличается в настоящее время, но не уверен, почему, но, возможно, сейчас это имеет смысл. –

ответ

1

В вашем изменении sessions_controller.rb файла:

def destroy 
    log_out 
    redirect_to_root_url 
end 

в

def destroy 
    log_out 
    redirect_to root_url 
end 
+1

Ах, человек, такой простой. спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^