2015-11-03 2 views
-1

Я полный новичок, когда дело доходит до Ruby on Rails, и я не могу понять, что вызывает эту синтаксическую ошибку в моем коде!Борьба за понимание этой синтаксической ошибки - Rails Tutorial Chapter 8

Для справки, я следую руководству Rails Майклом Хартлом и в настоящее время на главе 8 «8.15 Flash Test».

После создания и заполнения интеграционного теста для ошибки вспышки, я получаю эту ошибку, когда я запускаю тест грабель:

ERROR["test_should_get_new", SessionsControllerTest, 2015-11-01 06:24:20 +0000] 
test_should_get_new#SessionsControllerTest (1446359060.17s) 
SyntaxError:   SyntaxError: /Users/user/charity_app/app/controllers/sessions_controller.rb:15: syntax error, unexpected end-of-input, expecting keyword_end 


ERROR["test_login_with_invalid_information", UsersLoginTest, 2015-11-01 06:24:20 +0000] 
test_login_with_invalid_information#UsersLoginTest (1446359060.67s) 
SyntaxError:   SyntaxError: /Users/user/charity_app/app/controllers/sessions_controller.rb:15: syntax error, unexpected end-of-input, expecting keyword_end 
     test/integration/users_login_test.rb:6:in `block in <class:UsersLoginTest>' 
    test/integration/users_login_test.rb:6:in `block in <class:UsersLoginTest>' 

Вот мои тестовые файлы, маршруты файлы и мои сессии контроллера файл:

маршрутов файл:

Rails.application.routes.draw do 
root    'static_pages#home' 
get 'help' => 'static_pages#help' 
get 'about' => 'static_pages#about' 
get 'contact' => 'static_pages#contact' 
get 'signup' => 'users#new' 
get 'login' => 'sessions#new' 
post 'login' => 'sessions#create' 
delete 'logout' => 'sessions#destroy' 
resources :users 
end 

Сессия контроллер файл:

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 user in 
else 
    # show error message 
end 

def destroy 
end 
end 

users_login_test файл:

require 'test_helper' 

class UsersLoginTest < ActionDispatch::IntegrationTest 

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 
end 

и мой sessions_controller_test файл:

require 'test_helper' 

class SessionsControllerTest < ActionController::TestCase 
test "should get new" do 
get :new 
assert_response :success 
end 

end 

тест вспомогательный файл:

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 
require "minitest/reporters" 
Minitest::Reporters.use! 

class ActiveSupport::TestCase 
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical 
# order. 
fixtures :all 


# Add more helper methods to be used by all tests here... 
end 

Пожалуйста, помогите. Я не могу понять, почему возникает эта синтаксическая ошибка.

+3

Если вы правильно отделили свой код, у вас не возникли бы проблемы с поиском этой ошибки. Вам не хватает 'end' в конце метода' create' в контроллере сессий. –

+0

Это было правильно отступом в моих файлах, я просто не знал, как отступать здесь. Спасибо огромное! – feezy26

ответ

0

Обеспечьте правильное отступы, и поэтому вы не пропустите конец строк, таких как фигурные скобки, конечный оператор и так далее.

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 user in 
    else 
     # show error message 
    end 
end 

def destroy 
end 
end 
Смежные вопросы