简体   繁体   English

红宝石Rails教程第10章错误

[英]ruby rails tutorial chapter 10 error

I'm getting 8 Errors in chapter 10 of Michael Hartls Ruby on Rails Tutorial. 我在Michael Hartls Ruby on Rails教程的第10章中遇到了8个错误。 Everything worked just fine until the testing of 10.2.2 . 一切正常,直到10.2.2的测试。 I have no idea how to fix it... I hope you can help. 我不知道如何解决它...希望您能提供帮助。 Thanks in advance. 提前致谢。

The error messages: 错误消息:

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 ' 错误:UsersSignupTest#test_invalid_signup_information:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,预期输入结束测试/集成/users_signup_test.rb:6:in `封锁'

bin/rails test test/integration/users_signup_test.rb:5 bin / rails测试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 ' 错误:UsersSignupTest#test_valid_signup_information:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,预计输入结束测试/集成/users_signup_test.rb:17:in `封锁'

bin/rails test test/integration/users_signup_test.rb:16 bin / rails测试test / integration / users_signup_test.rb:16

...E ... 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 ' 错误:UsersLoginTest#test_login_with_valid_information_followed_by_logout:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,期望输入结束测试/集成/users_login_test.rb:24: `封锁'

bin/rails test test/integration/users_login_test.rb:18 bin / rails测试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 ' 错误:UsersEditTest#test_successful_edit:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,预期输入结束测试/集成/users_edit_test.rb:22:in `封锁'

bin/rails test test/integration/users_edit_test.rb:20 bin / rails测试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 ' 错误:UsersEditTest#test_unsuccessful_edit:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,期望输入结束测试/集成/users_edit_test.rb:11:in `封锁'

bin/rails test test/integration/users_edit_test.rb:9 bin / rails测试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 ' 错误:UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,期望输入结束测试/controllers/users_controller_test.rb:23: `封锁'

bin/rails test test/controllers/users_controller_test.rb:21 bin / rails测试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 ' 错误:UsersControllerTest#test_should_get_new:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,期望输入结束的测试/控制器/users_controller_test.rb:11:in `封锁'

bin/rails test test/controllers/users_controller_test.rb:10 bin / rails测试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 ' 错误:UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user:语法错误:/home/studi/workspace/sample_app/app/controllers/users_controller.rb:59:语法错误,意外的keyword_end,期望输入结束测试/controllers/users_controller_test.rb:16: `封锁'

bin/rails test test/controllers/users_controller_test.rb:14 bin / rails测试test / controllers / users_controller_test.rb:14

user_controller_test file: 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 file: 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

The error occured right after the instructions of 10.2.2. 按照10.2.2的指示立即发生错误。 The testing of 10.2.1 worked fine. 10.2.1的测试运行良好。

Looks like you've got an extra end in the users_controller , right before the closing one - line 58 好像您在users_controller有一个额外的endusers_controller在结束一行58之前

Edit: what @SebastianPalma said - beat me to it :) 编辑:@SebastianPalma说了什么-击败我:)

You have extra end in User#correct_user method. 您在User#correct_user方法中有多余的内容。 Try this: 尝试这个:

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

You dint paid attention to difference between the syntax of if - modifier and if -statment.you dont have to use extra end at the end of modifier.these both are same without any syntax error. 您要注意if-修饰符和if -statment的语法之间的区别。您不必在修饰符的末尾使用多余的结尾。这两者相同,没有任何语法错误。

if c.empty?
  return
end

return if c.empty?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM