Активная запись бесконечного цикла - PullRequest
0 голосов
/ 17 октября 2019

Когда пользователь пытается войти в систему и вводит имя пользователя, которое не существует, вместе со своим паролем, я хочу, чтобы метод с именемisting_user продолжал показывать меню входа в систему (login_screen_selection). Проблема состоит в том, что как только меню появляется снова, и пользователь вводит «1», который должен снова запросить у них имя пользователя, программа завершается. Я хочу, чтобы метод вел себя как бесконечный цикл, который может прерваться, только если вы введете имя пользователя, которое уже существует

def process_login
  case login_screen_selection
  when '1'
    existing_user
  when '2'
    create_account
  when '3'
    exit_application
  else
    process_login
  end
end

def login_screen_selection
  puts "1. Login"
  puts "2. Create account"
  puts "3. Exit"
  gets.chomp
end

def existing_user
  puts "Please Enter Username"
  get_username = gets.chomp

  puts "Please Enter Password"
  get_password = gets.chomp

  customer = Customer.find_by(
    username: get_username,
    password: get_password
    )

  if customer.nil? do
    puts 'Sorry, username and/or password combination not valid. Please try again'
    login_screen_selection 
    break if !customer.nil?
  end
end

Ответы [ 4 ]

1 голос
/ 17 октября 2019

Похоже, некоторые хорошие ответы. Я просто добавлю, что проверка для if customer.nil? или if customer или их вариантов не нужна, если вы делаете что-то вроде:

def existing_user
  puts "Please Enter Username"
  username = gets.chomp

  puts "Please Enter Password"
  password = gets.chomp

  unless customer = Customer.find_by(
                      username: username,
                      password: password
                    )
    puts 'Sorry, username and/or password combination not valid. Please try again'
    process_login
  end
end
0 голосов
/ 17 октября 2019

Только одна ошибка останавливает вас оттуда, в функции existing_user вы должны вызывать process_login, кроме login_screen_selection. login_screen_selection просто помещает сообщение и ждет ввода, если программа получает ввод, программа завершается.

def existing_user
  puts "Please Enter Username"
  get_username = gets.chomp

  puts "Please Enter Password"
  get_password = gets.chomp

  customer = Customer.find_by(
    username: get_username,
    password: get_password
    )

  if customer.nil? do
    puts 'Sorry, username and/or password combination not valid. Please try again'
    process_login
  end
end
0 голосов
/ 17 октября 2019

Вы можете войти в цикл. Вы будете там, пока не найдете клиента. Если это так, программа продолжит работу, и вы увидите меню.

def existing_user
  loop do
    puts "Please Enter Username"
    get_username = gets.chomp

    puts "Please Enter Password"
    get_password = gets.chomp

    customer = Customer.find_by(
      username: get_username,
      password: get_password
    )

    break if customer

    puts 'Sorry, username and/or password combination not valid. Please try again'
  end

  login_screen_selection
end
0 голосов
/ 17 октября 2019

Вы хотите цикл, поэтому напишите цикл:

   def existing_user
     while customer.nil? do
       puts "Please Enter Username"
       get_username = gets.chomp

       puts "Please Enter Password"
       get_password = gets.chomp

      customer = Customer.find_by(
        username: get_username,
        password: get_password
      )

      if customer.nil? do
        puts 'Sorry, username and/or password combination not valid. Please try again'
     end
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...