Учебник по рубиновым рельсам
Я получаю 8 ошибок в главе 10 учебника Майкла Хартла по Ruby on Rails. Все работало просто отлично до тестирования 10.2.2 . Я понятия не имею, как это исправить... Я надеюсь, что вы можете помочь. Заранее спасибо.
Сообщения об ошибках:
Е
Ошибка: UsersSignupTest#test_invalid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый тест конца-ввода / интеграция / users_signup_test.rb 6: "блок в"
Тест бин / рельсы тест / интеграция /users_signup_test.rb:5
Е
Ошибка: UsersSignupTest#test_valid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый тест конца-ввода / интеграция /users_signup_test.rb:17: 17: в: "блок в"
Тест бин / рельсы тест / интеграция / users_signup_test.rb:16
... E
Ошибка: UsersLoginTest#test_login_with_valid_information_followed_by_logout: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый конечный входной тест: тестирование / интеграция / пользователи: "блок в"
тест бин / рельсы тест / интеграция /users_login_test.rb:18
Е
Ошибка: UsersEditTest#test_successful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый тест конца-ввода / интеграция /users_edit_test.rb:22: в "блок в"
тест бин / рельсы тест / интеграция /users_edit_test.rb:20
Е
Ошибка: UsersEditTest#test_unsuccessful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый тест конца-ввода / интеграция /users_edit_test.rb:11: в "блок в"
Тест бин / рельсы тест / интеграция / users_edit_test.rb: 9
...... E
Ошибка: UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый конечный контроллер / контрольный_контроллер: ожидающий конечный 23-битный пользователь: ожидающий конец / контрольный_интернет: ожидающий конечный контроль / контроль: ожидающий конечный контроль / контроль: ожидающий конец / контрольный_интерроллер: ожидающий конец / контрольный_интерроллер: ожидающий конечный контроль / контроль: ожидающий конец / контрольный_интерроллер: ожидающий конечный контроль / входящий в систему контрольный контроль: ожидающий конечный контролер: ожидающий конечный контроллер / в контроллере: ожидающий конечный контроллер / в тесте: ожидающий конец / контрольный_интерроллер: ожидающий конец / контрольный_инвертор: ожидающий конечный контроллер / в тесте: ожидающий конечный контроллер / из-за ошибки: ошибка: "блок в"
тест bin / rails test/controllers/users_controller_test.rb:21
Е
Ошибка: UsersControllerTest#test_should_get_new: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданный ключевое слово_end, ожидаемый тест конца ввода /controllers/users_controller_test.rb:11 "блок в"
тест bin / rails test/controllers/users_controller_test.rb:10
Е
Ошибка: UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, непредвиденный ключевое слово_end, ожидаемый конечный контроллер / контрольный контроль:16-й пользователь в тесте: "блок в"
тест bin / rails test/controllers/users_controller_test.rb:14
Файл user_controller_test:
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
@other_user = users(:archer)
end
test "should get new" do
get signup_path
assert_response :success
end
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
Файл users_controller:
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
# Before filters
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
end
end
end
Ошибка произошла сразу после указания 10.2.2 . Тестирование 10.2.1 работало нормально.
2 ответа
Похоже, у вас есть дополнительный end
в users_controller
Прямо перед закрывающей строкой 58
Редактировать: что @SebastianPalma сказал - победить меня в этом:)
У вас есть дополнительный конец в методе User#correct_user. Попробуй это:
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
# Before filters
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
end
end
Вы обратили внимание на разницу между синтаксисом модификаторов if и if -statment. Вам не нужно использовать дополнительный конец в конце модификатора. Оба они одинаковы без синтаксической ошибки.
if c.empty?
return
end
return if c.empty?