rubyrails教程第10章错误
ruby rails tutorial chapter 10 error
我在 Michael Hartls Ruby 关于 Rails 教程的第 10 章中遇到了 8 个错误。在测试 10.2.2 之前,一切都很好。
我不知道如何解决它......我希望你能帮忙。提前致谢。
错误信息:
E
Error: UsersSignupTest#test_invalid_signup_information: SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/integration/users_signup_test.rb:6:in `block in '
bin/rails test test/integration/users_signup_test.rb:5
E
Error: UsersSignupTest#test_valid_signup_information: SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/integration/users_signup_test.rb:17:in `block in '
bin/rails test test/integration/users_signup_test.rb:16
...E
Error:
UsersLoginTest#test_login_with_valid_information_followed_by_logout:
SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/integration/users_login_test.rb:24:in `block in '
bin/rails test test/integration/users_login_test.rb:18
E
Error: UsersEditTest#test_successful_edit: SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/integration/users_edit_test.rb:22:in `block in '
bin/rails test test/integration/users_edit_test.rb:20
E
Error: UsersEditTest#test_unsuccessful_edit: SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/integration/users_edit_test.rb:11:in `block in '
bin/rails test test/integration/users_edit_test.rb:9
......E
Error:
UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user:
SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/controllers/users_controller_test.rb:23:in `block in '
bin/rails test test/controllers/users_controller_test.rb:21
E
Error: UsersControllerTest#test_should_get_new: SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/controllers/users_controller_test.rb:11:in `block in '
bin/rails test test/controllers/users_controller_test.rb:10
E
Error:
UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user:
SyntaxError:
/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:
syntax error, unexpected keyword_end, expecting end-of-input
test/controllers/users_controller_test.rb:16:in `block in '
bin/rails test 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 测试正常。
看起来您在 users_controller
中有一个额外的 end
,就在最后一个 - 第 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.you 的语法之间的区别,不必在 modifier.these 的末尾使用额外的 end 两者都是相同的,没有任何语法错误。
if c.empty?
return
end
return if c.empty?
我在 Michael Hartls Ruby 关于 Rails 教程的第 10 章中遇到了 8 个错误。在测试 10.2.2 之前,一切都很好。 我不知道如何解决它......我希望你能帮忙。提前致谢。
错误信息:
E
Error: UsersSignupTest#test_invalid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/integration/users_signup_test.rb:6:in `block in '
bin/rails test test/integration/users_signup_test.rb:5
E
Error: UsersSignupTest#test_valid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/integration/users_signup_test.rb:17:in `block in '
bin/rails test test/integration/users_signup_test.rb:16
...E
Error: UsersLoginTest#test_login_with_valid_information_followed_by_logout: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/integration/users_login_test.rb:24:in `block in '
bin/rails test test/integration/users_login_test.rb:18
E
Error: UsersEditTest#test_successful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/integration/users_edit_test.rb:22:in `block in '
bin/rails test test/integration/users_edit_test.rb:20
E
Error: UsersEditTest#test_unsuccessful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/integration/users_edit_test.rb:11:in `block in '
bin/rails test test/integration/users_edit_test.rb:9
......E
Error: UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/controllers/users_controller_test.rb:23:in `block in '
bin/rails test test/controllers/users_controller_test.rb:21
E
Error: UsersControllerTest#test_should_get_new: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/controllers/users_controller_test.rb:11:in `block in '
bin/rails test test/controllers/users_controller_test.rb:10
E
Error: UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: syntax error, unexpected keyword_end, expecting end-of-input test/controllers/users_controller_test.rb:16:in `block in '
bin/rails test 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 测试正常。
看起来您在 users_controller
中有一个额外的 end
,就在最后一个 - 第 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.you 的语法之间的区别,不必在 modifier.these 的末尾使用额外的 end 两者都是相同的,没有任何语法错误。
if c.empty?
return
end
return if c.empty?