ruby rails учебник глава 10 ошибка

Я получаю 8 ошибок в главе 10 учебника Майкла Хартлса по Ruby on Rails. Все работало нормально до тестирования 10.2.2. Понятия не имею, как это исправить ... Надеюсь, вы поможете. Заранее спасибо.

Сообщения об ошибках:

E

Ошибка: UsersSignupTest # test_invalid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое слово_end, ожидание теста конца ввода / интеграции / users_signup_test.rb: 6: в `блокировать '

bin / rails test test / integration / users_signup_test.rb: 5

E

Ошибка: UsersSignupTest # test_valid_signup_information: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое слово_end, ожидание теста конца ввода / интеграции / users_signup_test.rb: 17: in `блокировать '

bin / rails test test / integration / 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, ожидание окончания ввода test / integration.rblogin: в тесте / интеграции с пользователем 24 `блокировать '

bin / rails test test / integration / users_login_test.rb: 18

E

Ошибка: UsersEditTest # test_successful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое слово_end, ожидание окончания ввода теста / интеграции / users_edit_test.rb: 22: in `блокировать '

bin / rails test test / integration / users_edit_test.rb: 20

E

Ошибка: UsersEditTest # test_unsuccessful_edit: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое слово_end, ожидание теста конца ввода / интеграции / users_edit_test.rb: 11: in `блокировать '

bin / rails test test / integration / users_edit_test.rb: 9

......E

Ошибка: UsersControllerTest # test_should_redirect_update_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое_слово_окончание, ожидание конца_контроллера_ключевого_слова, ожидание завершения_контроллера_ключевого_слова: пользовательский_контроллер / тестовый_контроллер 23 / входной_контроллер / пользовательский тест / `блокировать '

bin / rails test test / controllers / users_controller_test.rb: 21

E

Ошибка: UsersControllerTest # test_should_get_new: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое слово_end, ожидание теста конца ввода / контроллеры / users_controller_test.rb: 11: in `блокировать '

bin / тестовые рельсы / контроллеры / users_controller_test.rb: 10

E

Ошибка: UsersControllerTest # test_should_redirect_edit_when_logged_in_as_wrong_user: SyntaxError: /home/studi/workspace/sample_app/app/controllers/users_controller.rb:59: синтаксическая ошибка, неожиданное ключевое_слово_конце, ожидается конец_контроллера_ключевого_пользователя: / intest_trollers_пользователей: / controllers / control `блокировать '

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 прошло нормально.


person Max Heumann    schedule 19.12.2017    source источник
comment
Ошибка опечатки, возможно, лишний end в строке №58.   -  person Sebastian Palma    schedule 19.12.2017


Ответы (2)


Похоже, у вас есть лишний end в users_controller, прямо перед закрывающим - строка 58

Изменить: что сказал @SebastianPalma - опередите меня :)

person SRack    schedule 19.12.2017
comment
большое спасибо за быстрый ответ! лишний конец действительно был проблемой. пока ошибок больше нет ... - person Max Heumann; 20.12.2017
comment
Я получил ответ первым, за исключением комментария Себастьяна, который на несколько секунд накрыл меня :) Рад помочь @MaxHeumann. - person SRack; 20.12.2017

У вас есть дополнительный конец в методе User # correk_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?
person Ritesh Ranjan    schedule 19.12.2017
comment
Большое спасибо за быстрый ответ и подробные инструкции! нет ошибки после удаления лишнего конца! - person Max Heumann; 20.12.2017